sqlalchemy按计数列过滤

10 投票
1 回答
16534 浏览
提问于 2025-04-16 18:59

我有一个用户查询,它是根据每个用户的订单数量(ordersCount)来筛选的。

User.query.filter('ordersCount>2')

但是当我运行这个查询时,它显示:“在‘where子句’中找不到‘ordersCount’这个列。”

根据我的经验,对于这种操作,我应该使用having,因为mysql不允许对不属于表的字段进行筛选。但是如果我用having来替代筛选的话,我得到的是:

(1054, "Unknown column 'ordersCount' in 'having clause'") 'SELECT count(1) AS count_1 \nFROM user \nHAVING ordersCount > 2' ()

那么在sqlalchemy中,我该如何筛选一个计数列呢?

1 个回答

23

请查看关于 排序、分组、限制、偏移等 的文档。根据提供的示例代码,以及假设你的订单存储在 orders 表中,你的代码大概会像这样:

>>> s = select([orders.c.user_id, func.count(orders.c.id)]).\
...     group_by(orders.c.user_id).having(func.count(orders.c.id) > 2)

这样你就能得到相关用户的 user_id。如果你想获取 User 对象,只需把 s 变成一个子查询,然后将你的 User 查询和这个子查询连接起来,就能获取到相关的用户。

撰写回答