Python / SQLAlchemy,如何访问查询结果

K P*_*osh 2 python sql sqlalchemy

我正在编写一个简单的测试,以验证“ id”列中不同值的数量是否与每个表的行数匹配。我期望能够访问对象的特定值,但是当我运行代码并尝试打印变量的值时,我可以看到我的对象是sqlalchemy.engine.result.ResultProxy对象,位于...,而不是人类可读的东西。我已经在SQLAlchemy网站上呆了一个多小时,并在Google搜索了我的问题的多个排列,但是没有找到我想要的东西。

我的代码(带终端输出)如下:

from sqlalchemy import create_engine 
engine = create_engine('postgresql://kyle.pekosh@localhost:5432/testload')
connection = engine.connect()
id_count = connection.execute('SELECT COUNT(DISTINCT(id)) FROM csv.agencies')
id_count
<sqlalchemy.engine.result.ResultProxy object at 0x10357d290>
Run Code Online (Sandbox Code Playgroud)

Dan*_*Dan 5

这是SQLAlchemy的预期行为。您需要与ResultProxy进行交互。根据SQLAlchemy的文档

返回的结果是ResultProxy的实例,该实例引用DBAPI游标,并提供与DBAPI游标的接口很大程度上兼容的接口。当所有结果行(如果有)用完时,ResultProxy将关闭DBAPI游标。不返回任何行的ResultProxy,例如UPDATE语句的行(不返回任何行),在构造后立即释放游标资源。

ResultProxy API允许您获取数据:

results = connection.execute('SELECT COUNT(DISTINCT(id)) FROM csv.agencies')
id_count = results.first()[0]
Run Code Online (Sandbox Code Playgroud)