SQL炼金术 – 获取表的列表
在文档中我找不到任何有关这方面的信息,但是如何获得在SQLAlchemy中创build的表的列表?
我使用类方法来创build表。
所有表都收集在sqlalchemy元数据对象的tables
属性中。 只是得到这些表的名称列表:
>>> metadata.tables.keys() ['posts', 'comments', 'users']
如果您使用声明性扩展,那么您可能不是自己pipe理元数据。 幸运的是,元数据仍然存在于基类中,
>>> Base = sqlalchemy.ext.declarative.declarative_base() >>> Base.metadata MetaData(None)
如果你想弄清楚你的数据库中有什么表格,即使你还没有告诉sqlalchemy,那么你也可以使用表格reflection。 然后,sqlalchemy将检查数据库,并使用所有缺less的表更新元数据。
>>> metadata.reflect(engine)
engine
对象中有一个方法来获取表名的列表。 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')
您创build表的元数据对象包含在字典中。
metadata.tables.keys()
from sqlalchemy import create_engine engine = create_engine('postgresql://use:pass@localhost/DBname') print (engine.table_names())
同时反映所有表格也允许您检索隐藏的表格名称。 我创build了一些临时表,他们出现了
meta = MetaData() meta.reflect(bind=myengine) for table in reversed(meta.sorted_tables): print table
我正在解决同样的问题,并find这个职位。 经过一些尝试运行后,我会build议使用下面列出所有表:(由zerocog提到)
metadata = MetaData() metadata.reflect(bind=engine) for table in metadata.sorted_tables: print(table)
这对于直接的桌子处理很有用,我build议你这样做。
并使用下面的代码来获取表名:
for table_name in engine.table_names(): print(table_name)
“metadata.tables”为表名和表对象提供了一个Dict。 这对于快速查询也是有用的。