【问题标题】:SQLAlchemy: Hybrid expression with relationship (on parent)SQLAlchemy:具有关系的混合表达式(在父级上)
【发布时间】:2021-08-07 13:20:28
【问题描述】:

类似于问题SQLAlchemy: Hybrid expression with relationship,但我想知道在父级上实现混合表达式的最佳方法是什么。改编的例子:


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_property
def n_teachers(self):
    return len(self.teachers)

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

【问题讨论】:

    标签: python sqlalchemy


    【解决方案1】:
    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()
    

    【讨论】:

      猜你喜欢
      • 2013-11-15
      • 2016-08-17
      • 2012-05-18
      • 2016-02-29
      • 1970-01-01
      • 2020-01-15
      • 2017-02-10
      • 2012-06-18
      • 1970-01-01
      相关资源
      最近更新 更多