Я не мог найти никакой информации об этом в документации, но как я могу получить список таблиц, созданных в SQLAlchemy?
Я использовал метод класса для создания таблиц.
Я не мог найти никакой информации об этом в документации, но как я могу получить список таблиц, созданных в SQLAlchemy?
Я использовал метод класса для создания таблиц.
Все таблицы собраны в tables
атрибутов объекта SQLAlchemy MetaData. Чтобы получить список имен этих таблиц:
>>> 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:[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')
from sqlalchemy import create_engine
engine = create_engine('postgresql://use:[email protected]/DBname')
print (engine.table_names())
Объект метаданных, созданный с помощью таблиц с, имеет это в словаре.
metadata.tables.keys()
Отражение всех таблиц одновременно позволяет также получить скрытые имена таблиц. Я создал несколько временных таблиц, и они появились с помощью
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)
"metadata.tables" предоставляет Dict для имени таблицы и объекта Table. который также будет полезен для быстрого запроса.
В интерпретаторе python используйте db.engine.table_names()
$ python
>>> from myapp import db
>>> db.engine.table_names()