2013-01-16 112 views
2

這應該是一個先前提出的問題,我搜索了但我找不到任何答案。對不起,如果它重複。我有一個查詢讓說:總結了一個查詢字段

my_query=session.query(Item).filter(somefilter) 

現在,項目有一列,可以說counter,我想找到的my_query此列的總和。 我是這樣做的:

sum=0 
for row in query: 
    sum+=row.counter 

但我不是這樣,這是特別是在大型數據庫這樣做的有效方式。我知道這是可能的:sqlalchemy simple example of `sum`, `average`, `min`, `max`,但是這是需要我已濾波的版本my_queryqry過濾(從頁借來的)。我不知道在qry v.s.之上再次進行過濾是否更有效。使用my_query上的for循環。

+0

http://stackoverflow.com/questions/3292752/sum-fields-in-sqlalchemy?rq=1 – greeness

+0

你能接受我的答案嗎? –

回答

7

我有同樣的問題。我問irc.freenode.org#sqlalchemy和inklesspen指向我Query#with_entities()

sum = my_query.with_entities(func.sum(Item.counter)).scalar() 
-1

有一大堆SQL的 「羣」 功能sqlalchemy.func:

from sqlalchemy import func 
my_query = session.query(func.sum(Item.counter)).filter(somefilter) 
+0

嗨Ketouem,我認爲在這種情況下,你應該過濾查詢的頂部,而我問的是總結一個已經存在的查詢... – Amin