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.
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.
Jawaban:
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)
sqlalchemy.MetaData.reflect()
?
reflect
argumen ke MetaData.__init__
, bendera boolean, tidak digunakan lagi untuk digunakan MetaData.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()
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())
engine.table_names()
Dalam interpreter python gunakan db.engine.table_names ()
$ python
>>> from myapp import db
>>> db.engine.table_names()
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')
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.
reflect
, metadata.sorted_tables
tidak akan berhasil
Mencerminkan 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
engine = sqlalchemy.create_engine('mysql://user:password@host/db_name')
daripada"mysql://user:password@host"
danengine.execute("use db_name")
.