gpt4 book ai didi

sql - 查询sqlalchemy中的多对多关系

转载 作者:搜寻专家 更新时间:2023-10-30 20:33:21 26 4
gpt4 key购买 nike

我有两个由关系表链接的数据库类,我可以检索分配给每篇论文的问题。但是,我想检索当前分配给当前论文的所有问题,而不管它们分配给的任何其他论文。我尝试了很多不同的东西,但没有什么能完全达到我想要的效果。

我相信某种外部左连接应该可以做到这一点,但我想不出正确的语法。

提前感谢您的建议。

到目前为止,这是数据库结构:

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

最佳答案

您应该能够遵循您在 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

关于sql - 查询sqlalchemy中的多对多关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57342276/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com