从sqlalchemy获取COUNT

时间:2017-06-22 03:49:02

标签: python postgresql sqlalchemy

我有:

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。

3 个答案:

答案 0 :(得分:12)

虽然其他答案有效,但SQLAlchemy为标量查询提供了ResultProxy.scalar()的快捷方式:

count = db.engine.execute('select count(id) from sometable').scalar()

scalar()获取第一行的第一列并关闭结果集,如果没有行则返回None。如果使用查询API,还有Query.scalar()

答案 1 :(得分:3)

你要求的名为解包ResultProxyiterable,所以我们可以做

# 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