PostgreSQL 有 aggregate expressions ,例如count(*) FILTER(WHERE state = 'success')
。如何使用 SQLAlchemy 生成此类表达式?
最佳答案
假设我有一个带有 bool 字段active
的模型Machine
,并且想通过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.avg
、func.sum
等
使用 funcfilter(count(...), filter)
的更长语法
func.count(Machine.id).filter(Machine.active == True)
是以下内容的简写:
from sqlalchemy import funcfilter
funcfilter(func.count(Machine.id), Machine.active == True)
关于python - 我可以使用 SQLAlchemy 使用聚合表达式吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47324538/