2011-06-05 92 views
5

我有一个用户查询按每个用户的订单数量(ordersCount)过滤。sqlalchemy filter by count column

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

如果我运行它,它说:“未知列‘ordersCount’在‘where子句’”

从我的经验,我应该使用具有这样操作,因为MySQL不会允许它的领域不表的一部分,但如果我有具有过滤器,而不是运行它,我得到:

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

那么,如何在SQLAlchemy中筛选数列?

回答

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查询与此子查询结合使用以检索相关用途。