Bu belgeyle ilgili hiçbir bilgi bulamadım, ancak SQLAlchemy'de oluşturulan tabloların listesini nasıl alabilirim?SQL Alchemy - Tabloların bir listesini alma
Tabloları oluşturmak için sınıf yöntemini kullandım.
Bu belgeyle ilgili hiçbir bilgi bulamadım, ancak SQLAlchemy'de oluşturulan tabloların listesini nasıl alabilirim?SQL Alchemy - Tabloların bir listesini alma
Tabloları oluşturmak için sınıf yöntemini kullandım.
Tüm tablolar sqlalchemy MetaData nesnesinin tables
özniteliğinde toplanır.
>>> metadata.tables.keys()
['posts', 'comments', 'users']
Eğer bildirim uzantısı kullanıyorsanız, o zaman muhtemelen meta kendi başına yönetme değildir: sadece bu tabloların isim listesini almak için. Neyse ki, meta, hala BaseClass bulunduğundan
>>> Base = sqlalchemy.ext.declarative.declarative_base()
>>> Base.metadata
MetaData(None)
sonra yapabilirsiniz, tablolar bile bile henüz hakkında SQLAlchemy söylemedim olanlar arasından, veritabanınızda mevcut anlamaya çalışıyorsanız Tablo yansımasını kullan. sqlalchemy daha sonra veritabanını denetleyecek ve meta verileri tüm eksik tablolarla güncelleyecektir.
>>> metadata.reflect(engine)
Tabloları oluşturduğunuz meta veri nesnesi, bir sözlükte yer alır.
metadata.tables.keys()
tablo adını listesini almak için engine
nesnesinde bir yöntem yoktur. engine.table_names()
i 'traceback (son En son çağrı) olsun: Dosya "dedup_jobs.py", çizgi 31
Böyle bir şey arıyordu:
from sqlalchemy import create_engine
eng = create_engine('mysql+pymysql://root:[email protected]:3306', pool_recycle=3600)
q = eng.execute('SHOW TABLES')
available_tables = q.fetchall()
Bir yürütmek ve tüm tabloları döndürür gelmez.
Postgres: güncelleme
kere tüm Tabloları yansıtan
eng = create_engine('postgresql+psycopg2://root:[email protected]/
q = eng.execute('SELECT * FROM pg_catalog.pg_tables')
Bu, platformlar arası değil. Sadece mysql ile çalışacak, diğer veritabanı motorları ile çalışmayacak. –
@EdwardBetts haklısın, hangi db motoru merak ediyordun? – jmunsch
çok gizli bir tablo adlarını almak için izin verir. Ben bazı geçici tablolar oluşturulur ve onlar aynı sorunu çözüyorum
meta = MetaData()
meta.reflect(bind=myengine)
for table in reversed(meta.sorted_tables):
print table
Referans http://docs.sqlalchemy.org/en/latest/core/reflection.html
from sqlalchemy import create_engine
engine = create_engine('postgresql://use:[email protected]/DBname')
print (engine.table_names())
ile geldi ve bu yazı bulundu. Bazı deneyin vadede sonra tüm tabloları listelemek için aşağıdaki kullanımını öneririm: (zerocog tarafından bahsedilen)
metadata = MetaData()
metadata.reflect(bind=engine)
for table in metadata.sorted_tables:
print(table)
Bu doğrudan tablo işlemesi için kullanışlıdır ve hissediyorum önerilir.
Ve tablo adlarını almak için kod aşağıda kullanın:for table_name in engine.table_names():
print(table_name)
"metadata.tables" tablo adı ve Tablo nesnesi için bir Dict sağlar. Bu da hızlı sorgu için yararlı olacaktır.
Sürüm 0.8'den beri geçersiz: Lütfen sqlalchemy.schema.MetaData.reflect() yöntemini kullanın. Ve dikkat edin, 'engine = sqlalchemy.create_engine (' mysql: // user: password @ host/db_name ') 'yerine' 'mysql: // user: password @ host'' ve 'engine.execute ('db_name kullanın ") '. –
@XuJiawan: Burada hangi şeyin kullanımdan kaldırıldığından emin değilim, "sqlalchemy.MetaData.reflect()" değilse hangi yöntemi önerdiğimi bilmiyorum. – SingleNegationElimination
@IfLoop: Bunu [sqlalchemy belgesinden] buldum (http://docs.sqlalchemy.org/en/rel_0_9/core/metadata.html#sqlalchemy.schema.MetaData.params.reflect). –