繁体   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