Я не смог найти никакой информации об этом в документации, но как мне получить список таблиц, созданных в 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)
Для Postgres, если у вас несколько схем, вам нужно будет пройти через все схемы в движке:
from sqlalchemy import inspect
inspector = inspect(engine)
schemas = inspector.get_schema_names()
for schema in schemas:
print("schema: %s" % schema)
for table_name in inspector.get_table_names(schema=schema):
for column in inspector.get_columns(table_name, schema=schema):
print("Column: %s" % column)
engine = sqlalchemy.create_engine('mysql://user:password@host/db_name')
вместо"mysql://user:password@host"
иengine.execute("use db_name")
.sqlalchemy.MetaData.reflect()
?reflect
аргумент , чтобыMetaData.__init__
, логический флаг, осуждается в пользу использованияMetaData.reflect()
, точно так , как я показал в моем ответе.MetaData.reflect()
метод таким образом. А также прокомментируйте это для кого-то, у кого может быть такая же проблема, вызванная объявлением двигателя.В
engine
объекте есть метод для получения списка имен таблиц.engine.table_names()
источник
Traceback (most recent call last): File "dedup_jobs.py", line 31, in <module> print(engine.table_names()) File "/Users/darshanchoudhary/.virtualenvs/services/lib/python3.6/site-packages/sqlalchemy/engine/base.py", line 2128, in table_names return self.dialect.get_table_names(conn, schema) value = value.replace(self.escape_quote, self.escape_to_quote) AttributeError: 'NoneType' object has no attribute 'replace'
(стек усечен)DB.engine.table_names()
или любое другое имя переменной базы данных.from sqlalchemy import create_engine engine = create_engine('postgresql://use:pass@localhost/DBname') print (engine.table_names())
источник
engine.table_names()
В интерпретаторе python используйте db.engine.table_names ()
$ python >>> from myapp import db >>> db.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()
источник
Я решаю ту же проблему и нашел этот пост. После некоторой попытки запуска я бы предложил использовать ниже, чтобы перечислить все таблицы: (упомянутые 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. что также было бы полезно для быстрого запроса.
источник
reflect
,metadata.sorted_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
источник
Вот так просто:
Также, чтобы проверить, существует ли таблица:
источник