Não consegui encontrar nenhuma informação sobre isso na documentação, mas como posso obter uma lista das tabelas criadas no SQLAlchemy?
Usei o método de classe para criar as tabelas.
fonte
Não consegui encontrar nenhuma informação sobre isso na documentação, mas como posso obter uma lista das tabelas criadas no SQLAlchemy?
Usei o método de classe para criar as tabelas.
Todas as tabelas são coletadas no tables
atributo do objeto SQLAlchemy MetaData. Para obter uma lista dos nomes dessas tabelas:
>>> metadata.tables.keys()
['posts', 'comments', 'users']
Se você estiver usando a extensão declarativa, provavelmente não está gerenciando os metadados sozinho. Felizmente, os metadados ainda estão presentes na classe base,
>>> Base = sqlalchemy.ext.declarative.declarative_base()
>>> Base.metadata
MetaData(None)
Se você está tentando descobrir quais tabelas estão presentes em seu banco de dados, mesmo entre aquelas sobre as quais você ainda não disse ao SQLAlchemy, então você pode usar a reflexão de tabela. SQLAlchemy irá então inspecionar o banco de dados e atualizar os metadados com todas as tabelas ausentes.
>>> metadata.reflect(engine)
Para Postgres, se você tiver vários esquemas, precisará fazer um loop por todos os esquemas no mecanismo:
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')
vez de"mysql://user:password@host"
eengine.execute("use db_name")
.sqlalchemy.MetaData.reflect()
?reflect
argumento paraMetaData.__init__
, um sinalizador booleano, está obsoleto em favor do usoMetaData.reflect()
, exatamente como mostrei em minha resposta.MetaData.reflect()
método dessa forma. E também comente para outra pessoa que possa ter o mesmo problema causado pela declaração do motor.Existe um método no
engine
objeto para buscar o nome da lista de tabelas.engine.table_names()
fonte
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'
(pilha truncada)DB.engine.table_names()
ou qualquer que seja o nome da variável do banco de dados.fonte
engine.table_names()
Dentro do interpretador python, use db.engine.table_names ()
fonte
Eu estava procurando por algo parecido com isto:
Ele executa e retorna todas as tabelas.
atualizar:
Postgres:
fonte
O objeto de metadados com o qual você criou as tabelas tem isso em um dicionário.
fonte
Estou resolvendo mesmo problema e encontrei este post. Depois de executar algumas tentativas, sugiro usar abaixo para listar todas as tabelas: (mencionado por zerocog)
Isso é útil para o manuseio direto da mesa e acho que é recomendado.
E use o código abaixo para obter os nomes das tabelas:
"metadata.tables" fornece um Dict para o nome da tabela e o objeto Table. o que também seria útil para uma consulta rápida.
fonte
reflect
,metadata.sorted_tables
não funcionaráRefletir todas as tabelas de uma vez permite que você recupere nomes de tabelas ocultos também. Eu criei algumas tabelas temporárias e elas apareceram com
Referência http://docs.sqlalchemy.org/en/latest/core/reflection.html
fonte
Simples assim:
Além disso, para testar se existe uma tabela:
fonte