SQL Алхимия – Получение списка таблиц

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

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

 metadata.tables.keys() 

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

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

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

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

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

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

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