2010-09-01 73 views
1

我有两个类:问题和答案。一个问题可能有0个或多个答案。如何选择没有答案的问题,在sqlalchemy

class Question(Base): 
    __tablename__ = "questions" 
    answers = relationship('Answer', backref='question', 
          primaryjoin="Question.id==Answer.question_id") 

class Answer(Base): 
    __tablename__ = "answers" 

现在我想找到所有的问题都没有答案,怎么做呢?

我想:

Session.query(Question).filter('count(Question.answers)==0').all() 

这是不正确。什么是正确的?

+0

你得到什么错误讯息? – miku 2010-09-01 09:27:54

回答

3

只需使用

session.query(Question).filter(Question.answers == None).all() 

这基本上是一个NULL检查(common filter operators)。

这里有一个要点例如:http://gist.github.com/560473

查询生成的SQL语句:

SELECT questions.id AS questions_id 
FROM questions 
WHERE NOT (EXISTS (SELECT 1 
FROM answers 
WHERE questions.id = answers.question_id)) 
+0

@MYYN,这比我的简单多了,谢谢! – Freewind 2010-09-01 13:16:36

0

我的工作了,使用not exist

Session.query(Question).filter(not_(exists().where(Answer.question_id==Question.id))).all() 
+1

尽管生成的SQL类似/请查看我的文章,但可以让它更简单。 – miku 2010-09-01 09:46:48