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 

参考http://docs.sqlalchemy.org/en/latest/core/reflection.html

我正在解决同样的问题,并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。 这对于快速查询也是有用的。