Saya tidak dapat menemukan informasi apa pun tentang ini di dokumentasi, tetapi bagaimana saya bisa mendapatkan daftar tabel yang dibuat di SQLAlchemy?
Saya menggunakan metode kelas untuk membuat tabel.
sumber
Saya tidak dapat menemukan informasi apa pun tentang ini di dokumentasi, tetapi bagaimana saya bisa mendapatkan daftar tabel yang dibuat di SQLAlchemy?
Saya menggunakan metode kelas untuk membuat tabel.
Semua tabel dikumpulkan dalam tables
atribut objek SQLAlchemy MetaData. Untuk mendapatkan daftar nama tabel tersebut:
>>> metadata.tables.keys()
['posts', 'comments', 'users']
Jika Anda menggunakan ekstensi deklaratif, Anda mungkin tidak mengelola metadata sendiri. Untungnya, metadata masih ada di baseclass,
>>> Base = sqlalchemy.ext.declarative.declarative_base()
>>> Base.metadata
MetaData(None)
Jika Anda mencoba mencari tahu tabel apa yang ada di database Anda, bahkan di antara tabel yang belum Anda beri tahu SQLAlchemy, Anda dapat menggunakan refleksi tabel. SQLAlchemy kemudian akan memeriksa database dan memperbarui metadata dengan semua tabel yang hilang.
>>> metadata.reflect(engine)
Untuk Postgres, jika Anda memiliki beberapa skema, Anda harus melakukan perulangan melalui semua skema di mesin:
from sqlalchemy import inspect
inspector = inspect(engine)
schemas = inspector.get_schema_names()
for schema in schemas:
print("schema: %s" % schema)
for table_name in inspector.get_table_names(schema=schema):
for column in inspector.get_columns(table_name, schema=schema):
print("Column: %s" % column)
engine = sqlalchemy.create_engine('mysql://user:password@host/db_name')
daripada"mysql://user:password@host"
danengine.execute("use db_name")
.sqlalchemy.MetaData.reflect()
?reflect
argumen keMetaData.__init__
, bendera boolean, tidak digunakan lagi untuk digunakanMetaData.reflect()
, persis seperti yang saya tunjukkan dalam jawaban saya.MetaData.reflect()
metode dengan cara ini. Dan juga mengomentarinya untuk orang lain yang mungkin memiliki masalah yang sama yang disebabkan oleh deklarasi mesin.Ada metode dalam
engine
objek untuk mengambil daftar nama tabel.engine.table_names()
sumber
Traceback (most recent call last): File "dedup_jobs.py", line 31, in <module> print(engine.table_names()) File "/Users/darshanchoudhary/.virtualenvs/services/lib/python3.6/site-packages/sqlalchemy/engine/base.py", line 2128, in table_names return self.dialect.get_table_names(conn, schema) value = value.replace(self.escape_quote, self.escape_to_quote) AttributeError: 'NoneType' object has no attribute 'replace'
(tumpukan terpotong)DB.engine.table_names()
atau apapun nama variabel database.from sqlalchemy import create_engine engine = create_engine('postgresql://use:pass@localhost/DBname') print (engine.table_names())
sumber
engine.table_names()
Dalam interpreter python gunakan db.engine.table_names ()
$ python >>> from myapp import db >>> db.engine.table_names()
sumber
Saya mencari sesuatu seperti ini:
from sqlalchemy import create_engine eng = create_engine('mysql+pymysql://root:password@localhost:3306', pool_recycle=3600) q = eng.execute('SHOW TABLES') available_tables = q.fetchall()
Itu mengeksekusi dan mengembalikan semua tabel.
memperbarui:
Postgres:
eng = create_engine('postgresql+psycopg2://root:password@localhost/ q = eng.execute('SELECT * FROM pg_catalog.pg_tables')
sumber
Objek metadata yang Anda buat tabelnya sudah ada di kamus.
metadata.tables.keys()
sumber
Saya memecahkan masalah yang sama dan menemukan posting ini. Setelah mencoba beberapa kali, saya akan menyarankan penggunaan di bawah ini untuk membuat daftar semua tabel: (disebutkan oleh zerocog)
metadata = MetaData() metadata.reflect(bind=engine) for table in metadata.sorted_tables: print(table)
Ini berguna untuk penanganan meja langsung dan saya rasa direkomendasikan.
Dan gunakan kode di bawah ini untuk mendapatkan nama tabel:
for table_name in engine.table_names(): print(table_name)
"metadata.tables" menyediakan Dict untuk nama tabel dan objek Tabel. yang juga berguna untuk kueri cepat.
sumber
reflect
,metadata.sorted_tables
tidak akan berhasilMencerminkan Semua Tabel Sekaligus memungkinkan Anda untuk mengambil nama tabel yang tersembunyi juga. Saya membuat beberapa tabel sementara dan mereka muncul dengan
meta = MetaData() meta.reflect(bind=myengine) for table in reversed(meta.sorted_tables): print table
Referensi http://docs.sqlalchemy.org/en/latest/core/reflection.html
sumber
Sesederhana ini:
Juga, untuk menguji apakah tabel ada:
sumber