SQLAlchemy:带关系的混合表达式(在父节点上)



类似于问题SQLAlchemy:具有关系的混合表达式,但我想知道在父级上实现混合表达式的最佳方法是什么。改编后的示例:


class School(db.Model):
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String(30))
address = db.Column(db.String(30))
teachers = relationship('Teacher', back_populates='school')

class Teacher(db.Model):
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String(30))
id_school = db.Column(db.Integer, db.ForeignKey(School.id))
school = relationship('School', back_populates='teachers')

然后我给学校添加一个hybrid属性,使用这个关系,如下所示:


@hybrid_property
def n_teachers(self):
return len(self.teachers)

现在问题的关键是什么是最好的方式来提供这个属性到查询过滤器,如School.query.filter(School.n_teachers >= 10)(association_proxy,@<hybird_property>.expression,等)

from sqlalchemy import select, func
@n_teachers.expression
def n_teachers(self):
return select([func.count(Teacher.id)]).where(Teacher.id_school == self.id).as_scalar()

最新更新