我有ModelA
和ModelB
类,我想在ModelA
上定义一个名为number_of_b_models
的属性,其值是下一个查询的结果:SELECT count(modelb.id) FROM modelb WHERE modelb.a_id = :1 AND modelb.status = 2
其中:1
由a.id
中的ModelA
替换。
由于查询本身非常简单明了,因此不必使用func.count
构造或任何其他SQLAlchemy构造-只是让我轻松地使用number_of_b_models
实例中的ModelA
即可。
如何在number_of_b_models
上定义ModelA
?
最佳答案
作为SQLAlchemy模型(ModelA
)本身的属性。就内部实现而言,此解决方案并不理想-使用Session.object_session
类方法。可以用insepct(self).session
代替-几乎是同一回事。显然,这不适用于批量查询(如果要number_of_b_models
的n
实例中的ModelA
,将触发n
数据库调用)。它确实使ModelA
的API更清洁。
@property
def number_of_b_models(self):
return Session.object_session(self).query(
func.count(ModelB.id)
).filter_by(a_id=self.id, status=2).first()[0]
关于python - 使用SQLAlchemy在模型上按外键关系定义计数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/25227337/