我在sqlalchemy中使用混合属性时有些困惑。 例如,我有两个模型:
class FObject(db.Model):
code = db.Column(db.String, index=True, unique=True)
.....
finance = db.relationship("ObjectFinance", back_populates="obj")
@hybrid_property
def debt(self):
return sum(fin.sum_debt for fin in self.finance)
@debt.expression
def debt(cls):
return sql.select(
[func.sum(ObjectFinance.sum_debt)]).where(
ObjectFinance.obj_id == cls.id
).label('object_debt')
class ObjectFinance(db.Model):
code = db.Column(db.String)
....
sum_debt = db.Column(db.Float)
...
obj_id = db.Column(db.Integer, db.ForeignKey(FObject.id))
obj= db.relationship('FObject', back_populates="finance")
现在我要查询:
res = db.session.query(FObject).filter(FObject.code == '1').all()
它返回FObject
,其中包含除混合属性以外的所有列。如果我使用类似的东西
res = db.session.query(FObject, FObject.debt).filter(FObject.code == '1').all()
它进行正确查询(select id, code, ..., (select sum() from object_finance ..) as object_debt ...
),但是res
列表包含具有2个项目的元组-一个是FObject
,第二个是object_debt
。
如何获得FObject
和object_debt
的结果?