sqlalchemy按计数列过滤
我有一个用户查询,它是根据每个用户的订单数量(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
查询和这个子查询连接起来,就能获取到相关的用户。