5

これは前に尋ねられた質問であるはずです、私は検索しました、しかし私はそれについての答えを見つけることができませんでした。重複している場合は申し訳ありません。私は次のような質問をします。

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

ここで、Itemに列があり、たとえばcounter、この列の合計を求めますmy_query。私はこのようにそれを行うことができます:

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

しかし、これは特に大規模なデータベースでこれを行うための効率的な方法ではありません。私はこれが可能であることを知っています:sqlalchemyの`sum`、` average`、 `min`、` max`の簡単な例ですqryが、これにはすでにフィルタリングされたバージョンを与えた(ページから借りた)フィルタリングが必要my_queryです。qryでforループを使用するよりも、上でフィルタリングを再度実行する方が本当に効率的かどうかはわかりませんmy_query

4

2 に答える 2

13

同じ質問がありました。私はirc.freenode.org#sqlalchemyで質問し、inklesspenはQuery#with_entities()を指さしました。

sum = my_query.with_entities(func.sum(Item.counter)).scalar()
于 2014-07-09T23:02:34.177 に答える
-1

sqlalchemy.funcにはたくさんのSQL「グループ」関数があります。

from sqlalchemy import func
my_query = session.query(func.sum(Item.counter)).filter(somefilter)
于 2013-01-16T16:30:49.260 に答える