这应该是一个问过的问题,我搜索过但我找不到任何答案。对不起,如果它是重复的。我有一个查询可以说:
my_query=session.query(Item).filter(somefilter)
现在,Item有一个列,让我们说counter
,我想找到my_query
这一列的总和。
我可以这样做:
sum=0
for row in query:
sum+=row.counter
但我不这样做这是在大型数据库中特别有效的方法。我知道这是可能的:sqlalchemy simple example of `sum`, `average`, `min`, `max`,但这需要对我已经提供过滤版本qry
的{{1}}(从页面借用)进行过滤。我不知道在my_query
v.s.之上再次进行过滤是否真的更有效率。在qry
上使用for循环。
答案 0 :(得分:9)
我有同样的问题。我在irc.freenode.org上问了#sqlalchemy,inklesspen指着我Query#with_entities()。
sum = my_query.with_entities(func.sum(Item.counter)).scalar()
答案 1 :(得分:-1)
sqlalchemy.func中有一大堆SQL“group”函数:
from sqlalchemy import func
my_query = session.query(func.sum(Item.counter)).filter(somefilter)