python - SQLAlchemy:在多对多关系中过滤运算符

标签 python sql sqlalchemy

我有两个具有多对多关系的类,ItemsCategories

类别具有关联的值。

我想查询最高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 BYHAVING 而不仅仅是 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/

相关文章:

python - 在 Python Pandas 中删除多列中的所有重复行

powershell - 如何从 PowerShell 运行 SQL Server 查询?

python - 如何使用 sqlalchemy 有效地管理频繁的模式更改?

sql - 在 IF EXISTS 子句中分配变量

sql - 为什么即使条件计算结果为 false,也会创建在 IF 语句内声明的变量?

python - 模型和实例方法 : session aware (sqlalchemy)

python 3.x 安装后没有名为 sqlalchemy 的模块

Python oauth2 - 获取访问 token

python - django + unicode 常量错误

python - 如何使用 Matplotlib (Python 2.7) 和您自己的数据创建烛台图表