SQLAlchemy-获取表列表

2020/12/07 02:52 · python ·  · 0评论

我在文档中找不到与此有关的任何信息,但是如何获得在SQLAlchemy中创建的表的列表?

我使用了类方法来创建表。

所有表都收集在tablesSQLAlchemy MetaData对象属性中。要获取这些表的名称列表:

>>> metadata.tables.keys()
['posts', 'comments', 'users']

如果使用声明性扩展,则可能不是您自己管理元数据。幸运的是,元数据仍然存在于基类中,

>>> Base = sqlalchemy.ext.declarative.declarative_base()
>>> Base.metadata
MetaData(None)

如果您试图弄清楚数据库中存在哪些表,即使您还没有告诉SQLAlchemy的表中也有,那么您可以使用表反射。然后,SQLAlchemy将检查数据库并使用所有缺少的表更新元数据。

>>> metadata.reflect(engine)

对于Postgres,如果您有多个架构,则需要遍历引擎中的所有架构:

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)

engine对象中有一个方法来获取表名称列表。engine.table_names()

from sqlalchemy import create_engine
engine = create_engine('postgresql://use:pass@localhost/DBname')
print (engine.table_names())

在python解释器中,使用db.engine.table_names()

$ python
>>> from myapp import db
>>> db.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')

用于创建表的元数据对象在字典中具有该对象。

metadata.tables.keys()

我正在解决相同的问题,并找到了这篇文章。经过一些尝试运行后,我建议使用下面的方法列出所有表:(由zerocog提及)

metadata = MetaData()
metadata.reflect(bind=engine)
for table in metadata.sorted_tables:
    print(table)

这对于直接处理表很有用,我建议您这样做。

并使用以下代码获取表名:

for table_name in engine.table_names():
    print(table_name)

“ metadata.tables”为表名和表对象提供了一个Dict。这对于快速查询也很有用。

一次反映所有表允许您也检索隐藏的表名。我创建了一些临时表,他们出现了

meta = MetaData()
meta.reflect(bind=myengine)
for table in reversed(meta.sorted_tables):
    print table

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

就这么简单:

engine.table_names()

另外,要测试表是否存在:

engine.has_table(table_name)
本文地址:http://python.askforanswer.com/sqlalchemy-huoqubiaoliebiao.html
文章标签: ,   ,   ,  
版权声明:本文为原创文章,版权归 admin 所有,欢迎分享本文,转载请保留出处!

文件下载

老薛主机终身7折优惠码boke112

上一篇:
下一篇:

评论已关闭!