sqlalchemy按计数列过滤

时间:2011-06-05 16:00:04

标签: python sqlalchemy

我有一个用户查询,按每个用户的订单数量(ordersCount)进行过滤。

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

如果我运行它,它会说:“'where子句'中的未知列'ordersCount'”

根据我的经验,我应该使用这样的操作,因为mysql不会允许它用于不属于表的字段但是如果我运行它而不是过滤器我得到:

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

那么如何过滤sqlalchemy中的计数列?

1 个答案:

答案 0 :(得分:11)

请参阅Ordering, Grouping, Limiting, Offset...ing的文档。根据提供的示例代码并假设您的订单存储在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查询,以检索相关用途。