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。 这对于快速查询也是有用的。