SQLAlchemy - получение списка таблиц - PullRequest
76 голосов
/ 25 июня 2011

Я не смог найти никакой информации об этом в документации, но как я могу получить список таблиц, созданных в SQLAlchemy?

Я использовал метод класса для создания таблиц.

Ответы [ 8 ]

70 голосов
/ 25 июня 2011

Все таблицы собраны в атрибуте tables объекта метаданных SQLAlchemy.Чтобы получить список имен этих таблиц:

>>> metadata.tables.keys()
['posts', 'comments', 'users']

Если вы используете декларативное расширение, то вы, вероятно, не управляете метаданными самостоятельно.К счастью, метаданные все еще присутствуют в базовом классе:

>>> Base = sqlalchemy.ext.declarative.declarative_base()
>>> Base.metadata
MetaData(None)

Если вы пытаетесь выяснить, какие таблицы присутствуют в вашей базе данных, даже среди тех, о которых вы еще даже не говорили SQLAlchemy, тогдаВы можете использовать отражение таблицы.Затем SQLAlchemy проверит базу данных и обновит метаданные всеми отсутствующими таблицами.

>>> metadata.reflect(engine)
51 голосов
/ 31 мая 2015

В объекте engine есть метод для извлечения списка имен таблиц.engine.table_names()

23 голосов
/ 19 марта 2017
from sqlalchemy import create_engine
engine = create_engine('postgresql://use:pass@localhost/DBname')
print (engine.table_names())
12 голосов
/ 21 сентября 2016

Я искал что-то вроде этого:

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()

Выполняет и возвращает все таблицы.

Обновление:

Postgres:

eng = create_engine('postgresql+psycopg2://root:password@localhost/
q = eng.execute('SELECT * FROM pg_catalog.pg_tables')
4 голосов
/ 25 июня 2011

Объект метаданных, с которым вы создали таблицы, содержит его в словаре.

metadata.tables.keys()
3 голосов
/ 12 декабря 2018

В интерпретаторе python используйте db.engine.table_names ()

$ python
>>> from myapp import db
>>> db.engine.table_names()
3 голосов
/ 10 мая 2017

Я решаю ту же проблему и нашел этот пост. После некоторого пробного запуска, я бы предложил использовать ниже список всех таблиц: (упомянутый zerocog)

metadata = MetaData()
metadata.reflect(bind=engine)
for table in metadata.sorted_tables:
    print(table)

Это полезно для прямой обработки таблиц, и я чувствую, что это рекомендуется.

И используйте приведенный ниже код для получения имен таблиц:

for table_name in engine.table_names():
    print(table_name)

"metadata.tables" предоставляет Dict для имени таблицы и объекта Table. что также было бы полезно для быстрого запроса.

2 голосов
/ 24 ноября 2016

Отражение всех таблиц за один раз позволяет вам также получать скрытые имена таблиц. Я создал несколько временных таблиц, и они появились с

meta = MetaData()
meta.reflect(bind=myengine)
for table in reversed(meta.sorted_tables):
    print table

Ссылка http://docs.sqlalchemy.org/en/latest/core/reflection.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...