我有ModelAModelB类,我想在ModelA上定义一个名为number_of_b_models的属性,其值是下一个查询的结果:

SELECT count(modelb.id) FROM modelb WHERE modelb.a_id = :1 AND modelb.status = 2

其中:1a.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_modelsn实例中的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/

10-17 01:38