我想实现一个函数,该函数提供有关数据库中存在的所有表(以及它们的列名)的信息(不仅仅是那些用SQLAlChemy创建的表).在阅读文档时,在我看来,这似乎是通过反射完成的,但我没有设法让一些东西正常工作.关于如何做到这一点,有什么建议或例子吗?

推荐答案

从引擎开始:

from sqlalchemy import create_engine
engine = create_engine("postgresql://u:p@host/database")

所有表格/列名称的快速路径,请使用判断器:

from sqlalchemy import inspect
inspector = inspect(engine)

for table_name in inspector.get_table_names():
   for column in inspector.get_columns(table_name):
       print("Column: %s" % column['name'])

文档数量:http://docs.sqlalchemy.org/en/rel_0_9/core/reflection.html?highlight=inspector#fine-grained-reflection-with-inspector

或者,使用元数据/表:

from sqlalchemy import MetaData
m = MetaData()
m.reflect(engine)
for table in m.tables.values():
    print(table.name)
    for column in table.c:
        print(column.name)

文档数量:http://docs.sqlalchemy.org/en/rel_0_9/core/reflection.html#reflecting-all-tables-at-once

Database相关问答推荐

有关托管默认 SQL Server 实例的 Azure VM 数据库服务器的问题

数据库约束 - 保留(keep)还是忽略(ignore)?

如何在 sql server 2005 中获取到数据库的详细连接列表?

tzname字段/时区标识符名称的最大长度

SQL Server 中的Is Identity列属性是什么意思?

授予对具有特定前缀的多个表的权限

区分大小写的数据库有什么好处吗?

如何在 Products 表的主键和自然键之间做出决定?

免费的便携式数据库有哪些?

Django中的Atomic原子操作?

用 Python 永久存储字典的优雅方式?

在 SQL Server 中,如何以类似于 Oracle 的SELECT FOR UPDATE WAIT的方式锁定单行?

在 Heroku 生产站点上清除 Rails 应用程序数据库

MySQL 错误 - #1062 - Duplicate entry ' ' for key 2

如何在我的 SQL Server 代理作业(job)中创建一个将运行我的 SSIS 包的步骤?

从 CSV 文件填充 Android 数据库?

如何使用 django 判断 postgresql 数据库中是否存在某些内容?

可以将 SQLAlchemy 配置为非阻塞吗?

如何在 SQL Server 中总结时间字段

清空数据库是什么意思?