【发布时间】:2013-12-27 13:28:48
【问题描述】:
我想为包含计数的模型创建一个属性。
由于我总是需要该属性,因此我想使用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 之类的属性?
【问题讨论】:
标签: python sqlalchemy