SqlAlchemy:如何在where子句中使用所选子查询的结果

时间:2013-05-17 04:35:34

标签: python sql sqlalchemy

我希望得到一份文章清单以及每篇文章的评论数

我的查询看起来像这样 -

comments_subq = meta.Session.query(func.count(Comment.id)).filter(Comment.article_id==Article.id).as_scalar()

articles = meta.Session.query(Article, comments_subq.label("comment_count"))

articles = articles.filter(column('comment_count') >= 5)

它给出了这个错误

column "comment_count" does not exist LINE 5: WHERE comment_count >= 5

如何使用我选择的计数来过滤结果?

2 个答案:

答案 0 :(得分:2)

使用Query.subquery()方法。

comments_subq = meta.Session.query(Comment.article_id, func.count(Comment.id).label('comment_count')).group_by(Comment.article_id).subquery()

articles = meta.Session.query(Article, comments_subq.c.comment_count ).outerjoin(comments_subq, Article.id == comments_subq.c.article_id).filter(comments_subq.c.comment_count >= 5)

答案 1 :(得分:1)

这有效,但它是最优化的查询吗?

count_subq = meta.Session.query(Comment.article_id, func.count(Comment.article_id) \
    .label("comment_count")) \
    .group_by(Comment.article_id) \
    .subquery()

query = query.add_column(count_subq.c.comment_count.label("comment_count"))

query = query.outerjoin((count_subq, count_subq.c.article_id==Article.id))