Подтвердить что ты не робот

SQLAlchemy - получение списка таблиц

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

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

4b9b3361

Ответ 1

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

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

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

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

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

>>> metadata.reflect(engine)

Ответ 2

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

Ответ 3

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

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

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

Обновить:

Postgres:

eng = create_engine('postgresql+psycopg2://root:[email protected]/
q = eng.execute('SELECT * FROM pg_catalog.pg_tables')

Ответ 4

from sqlalchemy import create_engine
engine = create_engine('postgresql://use:[email protected]/DBname')
print (engine.table_names())

Ответ 5

Объект метаданных, созданный с помощью таблиц с, имеет это в словаре.

metadata.tables.keys()

Ответ 6

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

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

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

Ответ 7

Я решаю ту же проблему и нашел этот пост. После некоторой попытки запустить, я бы предложил использовать ниже, чтобы перечислить все таблицы: (упоминается 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. который также будет полезен для быстрого запроса.

Ответ 8

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

$ python
>>> from myapp import db
>>> db.engine.table_names()