SQLAlchemy-通过列表中的子级名称查询父级

时间:2020-06-14 14:44:31

标签: python sqlalchemy flask-sqlalchemy

我有两个班,分别是我的孩子班和父母班: 这是我的父母

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

1 个答案:

答案 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()
相关问题