I have 2 classes that are my child and parent class: This is my parent
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')
And this is the children:
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')
My associasion class is this:
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)
I am trying to query for every Parent that have Chilren with names found in a list. Eg for this: ('person', 'apple') I need an output like this one but the third row only contains 'person' class. https://ibb.co/zrknbLP
I solved this issue using this:
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()
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.