2013-05-17 52 views
1

我希望與每篇文章的評論的計數SQLAlchemy的:如何使用內選定的子查詢的結果where子句

我的查詢看起來像這樣相處的文章列表 -

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 

我如何使用我選擇的過濾結果的計數?

回答

0

這個工作,但它是最優化的查詢?

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)) 
+0

將子查詢列直接添加到查詢中,不需要使用'query.add_column'顯式添加列 – jackotonye

0

使用Query.subquery()方法。

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

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