使用 SQLalchemy 的元数据显示具有不同模式的所有表

问题描述 投票:0回答:2

我在显示数据库中的所有表名称时遇到一些问题。是否有一个选项可以让我跳过精确表模式的规范?

    def display(self):
       m = MetaData()
       m.reflect(self.engine,schema = "schemaname")
       for table in m.tables.values():
           print(table.name)

这适用于具有特定架构名称的所有表,但找不到有关如何显示所有这些表的任何信息。当我在 .reflect() 中没有提及架构名称时,不会显示表名称。

sql sqlalchemy
2个回答
0
投票

m.reflect
只能获取一种模式。如果模式选项为“无”,则获取公共模式表。如果你想获取所有模式表,你需要先获取模式列表。

from sqlalchemy import create_engine, inspect, MetaData

engine = create_engine('CONNECTION_STRING')

inspector = inspect(engine)

for schema in inspector.get_schema_names():
    for table in inspector.get_table_names(schema):
        print(table.name)

此架构列表有

infomation_shcema
。如果不需要,您需要排除此 shcema 信息。


0
投票

MetaData
对象可以一次检索一个模式的数据,但它可以包含多个模式的数据。您可以获得架构列表,然后将它们全部反映到单个元数据对象中:

# create an engine
engine = sqlalchemy.create_engine("...")

# get all schema names by inspection
inspector = sqlalchemy.inspect(engine)
schemas = inspector.get_schema_names()

# reflect all schemas into metadata into a single metadata object
metadata = sqlalchemy.MetaData()
for schema in schemas:
    metadata.reflect(engine, schema=schema)

# print all table names across all schemas
for table in metadata.tables:
    print(table)
© www.soinside.com 2019 - 2024. All rights reserved.