Я не мог найти информацию об этом в документации, но как получить список таблиц, созданных в SQLAlchemy?SQL Alchemy - Получение списка таблиц
Я использовал метод класса для создания таблиц.
Я не мог найти информацию об этом в документации, но как получить список таблиц, созданных в SQLAlchemy?SQL Alchemy - Получение списка таблиц
Я использовал метод класса для создания таблиц.
Все таблицы собраны в атрибуте tables
объекта MetaData sqlalchemy. чтобы просто получить список имен этих таблиц:
>>> metadata.tables.keys()
['posts', 'comments', 'users']
Если вы используете декларативное расширение, то вы, вероятно, не управление метаданными самостоятельно. К счастью, метаданные по-прежнему присутствует на BaseClass,
>>> Base = sqlalchemy.ext.declarative.declarative_base()
>>> Base.metadata
MetaData(None)
Если вы пытаетесь выяснить, какие таблицы присутствуют в базе данных, даже среди тех, которые вы даже не сказали SQLAlchemy о еще, то вы можете использование таблица отражающий. sqlalchemy будет проверять базу данных и обновлять метаданные всеми отсутствующими таблицами.
>>> metadata.reflect(engine)
Объект метаданных, с которым были созданы таблицы, имеет то, что в словаре.
metadata.tables.keys()
Существует метод в engine
объекта для извлечения списка имен таблиц. engine.table_names()
я получаю 'Traceback (самый последний вызов последнего): Файл " dedup_jobs.py", строка 31, в
Я искал что-то вроде этого:
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')
Это не кросс-платформенный. Он будет работать только с mysql, он не будет работать с другими механизмами баз данных. –
@EdwardBetts, вы правы, что за двигатель db вы задумывались? – jmunsch
Отражая сразу все таблицы позволяет получить скрытые имена таблиц тоже. Я создал некоторые временные таблицы, и они показали с
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 для имени таблицы и объекта таблицы. который также будет полезен для быстрого запроса.
Устаревший с версии 0.8: используйте метод sqlalchemy.schema.MetaData.reflect(). И обратите внимание, используйте 'engine = sqlalchemy.create_engine ('mysql: // user: password @ host/db_name')', а не '' mysql: // user: password @ host "и' engine.execute ("use db_name «)'. –
@XuJiawan: Я не уверен, какая вещь устарела здесь, я не уверен, какой метод им предлагает, если это не 'sqlalchemy.MetaData.reflect()'? – SingleNegationElimination
@IfLoop: Я нашел его из [документа sqlalchemy] (http://docs.sqlalchemy.org/en/rel_0_9/core/metadata.html#sqlalchemy.schema.MetaData.params.reflect). –