python - SQLAlchemy-Obtener una lista de tablas
mysql pyramid (7)
Al reflejar todas las tablas a la vez, también puede recuperar nombres de tablas ocultos. Creé algunas tablas temporales y aparecieron con
meta = MetaData()
meta.reflect(bind=myengine)
for table in reversed(meta.sorted_tables):
print table
Referencia http://docs.sqlalchemy.org/en/latest/core/reflection.html
No pude encontrar 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.
El objeto de metadatos con el que creó las tablas tiene eso en un diccionario.
metadata.tables.keys()
Estaba buscando algo como esto:
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()
Ejecuta y devuelve todas las tablas.
actualizar:
Postgres:
eng = create_engine(''postgresql+psycopg2://root:password@localhost/
q = eng.execute(''SELECT * FROM pg_catalog.pg_tables'')
Estoy resolviendo el mismo problema y encontré esta publicación. Después de intentar ejecutar, sugiero usar a continuación para enumerar todas las tablas: (mencionado por zerocog)
metadata = MetaData()
metadata.reflect(bind=engine)
for table in metadata.sorted_tables:
print(table)
Esto es útil para el manejo directo de la mesa y me parece recomendado.
Y use el código a continuación para obtener nombres de tablas:
for table_name in engine.table_names():
print(table_name)
"metadata.tables" proporciona un Dict para el nombre de la tabla y el objeto Table. que también sería útil para consultas rápidas.
Hay un método en engine
objeto engine
para obtener la lista de tablas nombre. engine.table_names()
Todas las tablas se recopilan en el atributo de tables
del objeto MetaData de SQLAlchemy. 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 intenta averiguar qué tablas están presentes en su base de datos, incluso entre las que aún no le ha contado a SQLAlchemy, puede usar la reflexión de tabla. SQLAlchemy inspeccionará la base de datos y actualizará los metadatos con todas las tablas faltantes.
>>> metadata.reflect(engine)
from sqlalchemy import create_engine
engine = create_engine(''postgresql://use:pass@localhost/DBname'')
print (engine.table_names())