No pude encontrar ninguna información sobre esto en la documentación, pero ¿cómo puedo obtener una lista de tablas creadas en SQLAlchemy?
Usé el método de clase para crear las tablas.
fuente
No pude encontrar ninguna información sobre esto en la documentación, pero ¿cómo puedo obtener una lista de tablas creadas en SQLAlchemy?
Usé el método de clase para crear las tablas.
Todas las tablas se recopilan en el tables
atributo del objeto SQLAlchemy MetaData. Para obtener una lista de los nombres de esas tablas:
>>> metadata.tables.keys()
['posts', 'comments', 'users']
Si está utilizando la extensión declarativa, probablemente no esté administrando los metadatos usted mismo. Afortunadamente, los metadatos todavía están presentes en la clase base,
>>> Base = sqlalchemy.ext.declarative.declarative_base()
>>> Base.metadata
MetaData(None)
Si está tratando de averiguar qué tablas están presentes en su base de datos, incluso entre las que aún no le ha dicho a SQLAlchemy, puede usar la reflexión de tabla. Luego, SQLAlchemy inspeccionará la base de datos y actualizará los metadatos con todas las tablas que faltan.
>>> metadata.reflect(engine)
Para Postgres, si tiene varios esquemas, deberá recorrer todos los esquemas en el motor:
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')
lugar de"mysql://user:password@host"
yengine.execute("use db_name")
.sqlalchemy.MetaData.reflect()
.reflect
argumento toMetaData.__init__
, una bandera booleana, está en desuso a favor de su usoMetaData.reflect()
, exactamente como lo he mostrado en mi respuesta.MetaData.reflect()
método de esta manera. Y también comentarlo para alguien más que pueda tener el mismo problema causado por la declaración del motor.Hay un método en el
engine
objeto para obtener el nombre de la lista de tablas.engine.table_names()
fuente
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'
(pila truncada)DB.engine.table_names()
o cualquiera que sea el nombre de la variable de la base de datos.fuente
engine.table_names()
Dentro del intérprete de Python, use db.engine.table_names ()
fuente
Estaba buscando algo como esto:
Realiza una ejecución y devuelve todas las tablas.
actualizar:
Postgres:
fuente
El objeto de metadatos con el que creó las tablas tiene eso en un diccionario.
fuente
Estoy resolviendo el mismo problema y encontré esta publicación. Después de intentarlo, sugeriría usarlo a continuación para enumerar todas las tablas: (mencionado por zerocog)
Esto es útil para el manejo directo de la mesa y creo que se recomienda.
Y use el siguiente código para obtener nombres de tablas:
"metadata.tables" proporciona un Dict para el nombre de la tabla y el objeto de la tabla. que también sería útil para consultas rápidas.
fuente
reflect
,metadata.sorted_tables
no funcionaráReflejar todas las tablas a la vez le permite recuperar nombres de tablas ocultos también. Creé algunas tablas temporales y aparecieron con
Referencia http://docs.sqlalchemy.org/en/latest/core/reflection.html
fuente
Así de simple:
Además, para probar si existe una tabla:
fuente