类似于问题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()