Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/347.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 通过sqlalchemy查询'pg_stat_database'视图_Python_Postgresql_Sqlalchemy - Fatal编程技术网

Python 通过sqlalchemy查询'pg_stat_database'视图

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() 它抛出错误,表

我试图通过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()
它抛出错误,表示它无法反映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"])