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.
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.
Respuestas:
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)
sqlalchemy.MetaData.reflect()
.
reflect
argumento to MetaData.__init__
, una bandera booleana, está en desuso a favor de su uso MetaData.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()
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.
from sqlalchemy import create_engine
engine = create_engine('postgresql://use:pass@localhost/DBname')
print (engine.table_names())
engine.table_names()
Dentro del intérprete de Python, use db.engine.table_names ()
$ python
>>> from myapp import db
>>> db.engine.table_names()
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()
Realiza una ejecución 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 intentarlo, sugeriría usarlo 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 creo que se recomienda.
Y use el siguiente código 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 de la tabla. que también sería útil para consultas rápidas.
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
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
engine = sqlalchemy.create_engine('mysql://user:password@host/db_name')
lugar de"mysql://user:password@host"
yengine.execute("use db_name")
.