Python 通过sqlalchemy查询'pg_stat_database'视图
我试图通过sqlalchemy元数据访问pg_stat_数据库视图,但抛出错误。这是我的密码Python 通过sqlalchemy查询'pg_stat_database'视图,python,postgresql,sqlalchemy,Python,Postgresql,Sqlalchemy,我试图通过sqlalchemy元数据访问pg_stat_数据库视图,但抛出错误。这是我的密码 engine = "Some_engine_specification" metadata = MetaData() metadata.reflect(engine, views=True, only=["table", "table2", "pg_stat_database"] base = automap_base(metadata=metadata) base.prepare() 它抛出错误,表
engine = "Some_engine_specification"
metadata = MetaData()
metadata.reflect(engine, views=True, only=["table", "table2", "pg_stat_database"]
base = automap_base(metadata=metadata)
base.prepare()
它抛出错误,表示它无法反映pg_stat_数据库
即使我没有指定only=['blabla']部分,在将类初始化为
pg_stats = base.classes.pg_stat_database
即使我提到这个计划,还是有错误。不过,我可以通过上述代码访问其他表
编辑1
感谢Ilja Everilä。要正确反映并获取表的实例,请使用以下命令:
engine = "some_engine_specification"
metadata = MetaData()
metadata.reflect(engine, only=["table1", "table2"])
metadata.reflect(engine, schema='pg_catalog', views=True, only=["pg_stat_database"]
base = automap_base(metadata=metadata)
base.prepare()
table1 = base.classes.table1
table2 = base.classes.table2
pg_stat_database = base.metadata.sorted_tables[index_of_pg_stat_database]
# To query
result = scoped_db_session.query(pg_stat_database).filter(pg_stat_database.columns.datname=="your_database")
您将无法将视图自动映射为模型,因为没有主键: 。。。然后,元数据中的每个可行表将自动生成一个新的映射类 及 注 所谓可行,我们的意思是,对于要映射的表,它必须指定主键。此外,如果该表被检测为其他两个表之间的纯关联表,则不会直接映射该表,而是将其配置为两个引用表的映射之间的多对多表 不过,通过meta将其反映为一个表是可能的。你现在的表情只是看错了地方。您必须显式地传递正确的:
您将无法将视图自动映射为模型,因为没有主键: 。。。然后,元数据中的每个可行表将自动生成一个新的映射类 及 注 所谓可行,我们的意思是,对于要映射的表,它必须指定主键。此外,如果该表被检测为其他两个表之间的纯关联表,则不会直接映射该表,而是将其配置为两个引用表的映射之间的多对多表 不过,通过meta将其反映为一个表是可能的。你现在的表情只是看错了地方。您必须显式地传递正确的:
metadata.reflect中不再出现错误,现在如何获取实例og pg_stats_数据库?base.classes.pg_stat_数据库正在抛出错误。我可以在base.metadata.sorted_tables[2].pg_catalog.pg_stat.database中看到它,但太长了。您无法为相关视图创建映射类,因为没有主键,因此无法通过base.classes访问它。您唯一的选择是使用该表。只需将其分配给一个较短的名称:pg_stat_database=metadata.tables['pg_catalog.pg_stat_database']并使用它。元数据中不再有错误。反射,现在如何获取实例og pg_stats_database?base.classes.pg_stat_数据库正在抛出错误。我可以在base.metadata.sorted_tables[2].pg_catalog.pg_stat.database中看到它,但太长了。您无法为相关视图创建映射类,因为没有主键,因此无法通过base.classes访问它。您唯一的选择是使用该表。只需将其分配给一个较短的名称:pg_stat_database=metadata.tables['pg_catalog.pg_stat_database']并使用它。如何通过编程获得正确的索引?您是指pg_stat_database的索引?是的。我猜如果你只是把你传递给的列表合并起来,对它们进行排序,然后对它们进行索引?感觉很脏。我现在无法验证这一点,但可能是pg_stat_数据库、排序表中有一些唯一的键。在它们上面循环并在找到键时停止?如何以编程方式获得正确的索引?您是指\u pg\u stat\u数据库的索引?是的。我猜如果你只是把你传递给的列表合并起来,对它们进行排序,然后对它们进行索引?感觉很脏。我现在无法验证这一点,但可能是pg_stat_数据库、排序表中有一些唯一的键。在它们上面绕一圈,找到钥匙后停下来?
# Reflect from schema "pg_catalog"
metadata.reflect(engine, views=True, schema="pg_catalog",
only=["pg_stat_database"])
# Reflect from the default schema of this meta, if any
metadata.reflect(engine, only=["table", "table2"])