2013-05-17 2 views
1

내가SqlAlchem ​​y의 : 내부 선택한 하위 쿼리의 결과를 사용하는 방법 절

내 쿼리는 다음과 같습니다 각 기사에 대한 댓글의 수와 함께 문서의 목록을 얻을하고자하는 곳 -

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) 
관련 문제