我想为包含计数的模型创建一个属性.
因为我总是需要的财产,我想使查询与JOIN
类似sqlalchemy.orm.relationship
与lazy='joined'
例如,我定义了如下的模型
import sqlalchemy as s, func from sqlalchemy.orm import relatioship # ... class Foo(Base): __tablename__ = 'foo' id = s.Column(s.Integer, primary_key=True) bar_id = s.Column(s.Integer, s.ForeignKey('bar.id')) bar = relationship('Bar') class Bar(Base): __tablename__ = 'bar' id = s.Column(s.Integer, primary_key=True) @property def foo_count(self): return Foo.query.filter_by(bar=self).count()
当我访问属性时foo_count
,它会向DBMS发送查询.
因为我总是访问这个属性,我想急切地加载它这样的计数属性
# Not session.query(Bar, func.count(Foo.id)).join(Foo) ... bar = Bar.query.first()
SQL将是这样的
SELECT id, COUNT(Foo.id) FROM bar INNER JOIN foo ON bar.id = foo.id
然后bar.foo_count
就不会发生SQL查询.
我该如何制作一个属性foo_count
?