[英]Can I use aggregate expressions using SQLAlchemy?
PostgreSQL have aggregate expressions , eg count(*) FILTER (WHERE state = 'success')
. PostgreSQL有聚合表达式 ,例如
count(*) FILTER (WHERE state = 'success')
。 How can I generate such expressions using SQLAlchemy? 如何使用SQLAlchemy生成此类表达式?
Suppose I have a model Machine
with a boolean field active
, and would like to filter the count by active = true
假设我有一个模型
Machine
其中的布尔字段为active
,并且想通过active = true
过滤计数
func.count(...).filter(...)
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')
)
We can look at the generated SQL query: 我们可以看一下生成的SQL查询:
>>> print(query)
SELECT count(machine.id) FILTER (WHERE machine.active = true) AS active_machines
FROM machine
This should work the same for the other aggregate functions like func.avg
, func.sum
, etc 这对于其他聚合函数(例如
func.avg
, func.sum
等)也应相同
funcfilter(count(...), filter)
funcfilter(count(...), filter)
语法更长 func.count(Machine.id).filter(Machine.active == True)
is short hand for: 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.