我在显示数据库中的所有表名称时遇到一些问题。是否有一个选项可以让我跳过精确表模式的规范?
def display(self):
m = MetaData()
m.reflect(self.engine,schema = "schemaname")
for table in m.tables.values():
print(table.name)
这适用于具有特定架构名称的所有表,但找不到有关如何显示所有这些表的任何信息。当我在 .reflect() 中没有提及架构名称时,不会显示表名称。
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 信息。
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)