簡體   English   中英

我可以使用SQLAlchemy使用聚合表達式嗎?

[英]Can I use aggregate expressions using SQLAlchemy?

PostgreSQL有聚合表達式 ,例如count(*) FILTER (WHERE state = 'success') 如何使用SQLAlchemy生成此類表達式?

假設我有一個模型Machine其中的布爾字段為active ,並且想通過active = true過濾計數

使用func.count(...).filter(...)

from models import db, Machine
from sqlalchemy.sql import func

query = db.session.query(
    func.count(Machine.id).filter(Machine.active == True)
    .label('active_machines')
)

我們可以看一下生成的SQL查詢:

>>> print(query)
SELECT count(machine.id) FILTER (WHERE machine.active = true) AS active_machines 
FROM machine

這對於其他聚合函數(例如func.avgfunc.sum等)也應相同

使用funcfilter(count(...), filter)語法更長

func.count(Machine.id).filter(Machine.active == True)是以下簡稱的簡稱:

from sqlalchemy import funcfilter

funcfilter(func.count(Machine.id), Machine.active == True)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM