我有两个具有多对多关系的类,Items
和 Categories
。
类别具有关联的值。
我想查询最高Categorie.value
(如果有)小于给定值的所有Items
。
到目前为止,我已经尝试过这样的查询:
from sqlalchemy.sql import functions
Session.query(Items).join(Categories,Items.categories).filter(functions.max(Categories.value)<3.14).all()
但在这种情况下,我收到 (OperationalError) 滥用聚合函数 max()
错误。
有办法进行这个查询吗?
最佳答案
您需要 GROUP BY
和 HAVING
而不仅仅是 WHERE
来对聚合进行过滤。
Session.query(Items).join(Items.categories).group_by(Items.id).having(functions.max(Categories.value)<3.14).all()
编辑:要还包含没有任何类别的项目,我相信您可以进行外部联接并在 HAVING
子句中放置 OR
:
Session.query(Items).outerjoin(Items.categories).group_by(Items.id)\
.having( (functions.max(Categories.value)<3.14) | (functions.count(Categories.id)==0) )\
.all()
关于python - SQLAlchemy:在多对多关系中过滤运算符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27326403/