我有两个班,分别是我的孩子班和父母班: 这是我的父母
class History(db.Model):
id = db.Column(db.Integer, primary_key=True)
imagePath = db.Column(db.Text, nullable=False)
scanDate = db.Column(db.Date, nullable=False)
isLastScan = db.Column(db.Boolean, nullable=False)
historyClasses = db.relationship('HistoryClasses', backref='history')
这是孩子:
class Classes(db.Model):
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String(100), nullable=False)
historyClasses = db.relationship('HistoryClasses', backref='class')
我的联想班是这样的:
class HistoryClasses(db.Model):
id = db.Column(db.Integer, primary_key=True)
historyId = db.Column(db.Integer, db.ForeignKey("history.id"), nullable=False)
classId = db.Column(db.Integer, db.ForeignKey("classes.id"), nullable=False)
numberOfClasses = db.Column(db.Integer, nullable=False)
我正在尝试查询每个具有在列表中找到名字的孩子的家长。 例如:(“人”,“苹果”) 我需要这样的输出,但第三行仅包含“ person”类。 https://ibb.co/zrknbLP
答案 0 :(得分:1)
我使用以下方法解决了这个问题:
if classFilterList:
filterList.append(Classes.name.in_(classFilterList))
imagePaths = db.session.query(History.imagePath) \
.outerjoin(Classifiers, Classifiers.id == History.classifierId) \
.outerjoin(HistoryClasses, HistoryClasses.historyId == History.id) \
.outerjoin(Classes, Classes.id == HistoryClasses.classId) \
.filter(*filterList) \
.group_by(History.id) \
.having(db.func.count(HistoryClasses.classId.distinct()) == len(set(classFilterList))) \
.all()