我有:
res = db.engine.execute('select count(id) from sometable')
返回的对象为sqlalchemy.engine.result.ResultProxy
。
如何从res
获取计数值?
索引无法访问Res,但我已将其视为:
count=None
for i in res:
count = res[0]
break
必须有一种更简单的方法吗?它是什么?我还没发现它。
注意:db是postgres
db。
答案 0 :(得分:12)
虽然其他答案有效,但SQLAlchemy为标量查询提供了ResultProxy.scalar()
的快捷方式:
count = db.engine.execute('select count(id) from sometable').scalar()
scalar()
获取第一行的第一列并关闭结果集,如果没有行则返回None。如果使用查询API,还有Query.scalar()
。
答案 1 :(得分:3)
你要求的名为解包,ResultProxy
是iterable,所以我们可以做
# there will be single record
record, = db.engine.execute('select count(id) from sometable')
# this record consist of single value
count, = record
答案 2 :(得分:2)
SQLAlchemy中的ResultProxy
(此处记录为http://docs.sqlalchemy.org/en/latest/core/connections.html?highlight=execute#sqlalchemy.engine.ResultProxy)是从数据库返回的列的可迭代内容。对于count()
查询,只需访问第一个元素以获取列,然后访问另一个索引以获取该列的第一个元素(和唯一)元素。
result = db.engine.execute('select count(id) from sometable')
count = result[0][0]
如果您正在使用SQLAlchemy的ORM,我建议您在相应的模型上使用Query.count()
方法,如下所示:http://docs.sqlalchemy.org/en/latest/orm/query.html?highlight=count#sqlalchemy.orm.query.Query.count