具有混合属性的SQLAlchemy查询

时间:2018-08-17 08:44:43

标签: python postgresql sqlalchemy

我在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。 如何获得FObjectobject_debt的结果?

0 个答案:

没有答案