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



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



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

757   7  

7 ответов:

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

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

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

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

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

>>> metadata.reflect(engine)

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

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

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

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

metadata.tables.keys()
from sqlalchemy import create_engine
engine = create_engine('postgresql://use:pass@localhost/DBname')
print (engine.table_names())

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

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

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

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

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

Comments

    Ничего не найдено.