我有两个通过关系表链接的数据库类,我可以检索分配给每篇论文的问题。但是,我想检索当前分配给当前论文的所有非问题,无论它们分配给了其他任何论文。我尝试了很多不同的事情,我没有做任何想要的事情。
我相信应该使用某种外部的左联接,但是我无法弄清楚正确的语法。
预先感谢您的建议。
到目前为止,这是数据库结构:
class Question(db.Model):
__tablename__ = 'question'
id = db.Column(db.Integer, primary_key=True)
papers = db.relationship(
'Paper', secondary='question_in', backref='has_question', lazy='dynamic')
class Paper(db.Model):
__tablename__ = 'paper'
id = db.Column(db.Integer, primary_key=True)
#returns the questions in the paper
def all_questions(self):
questions = Question.query.filter(Question.papers.any(id=self.id)).all()
return questions
Question_in = db.Table('question_in',
db.Column('question_id', db.Integer, db.ForeignKey('question.id'), primary_key=True),
db.Column('paper_id', db.Integer,db.ForeignKey('paper.id'), primary_key=True),
)
答案 0 :(得分:1)
您应该能够遵循在all_questions
函数中使用的相同逻辑,并使用subquery()
对其进行过滤:
def not_assigned(self):
assigned_questions = db.session.query(Question.id)\
.filter(Question.papers.any(id=self.id)).subquery()
not_assigned = db.session.query(Question)\
.filter(Question.id.notin_(assigned_questions)).all()
return not_assigned