Как выбрать вопросы, на которые нет ответов, в sqlalchemy - PullRequest
1 голос
/ 01 сентября 2010

У меня есть два класса: вопрос и ответ.На вопрос может быть 0 или много ответов.

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()

Это неверно.Что является правильным?

Ответы [ 2 ]

3 голосов
/ 01 сентября 2010

Просто используйте

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

, что в основном является проверкой NULL ( общие операторы фильтрации ).

Вот пример суть: 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 голосов
/ 01 сентября 2010

Я разобрался, используйте not exist:

Session.query(Question).filter(not_(exists().where(Answer.question_id==Question.id))).all()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...