SQLAlchemy group_by返回具有聚合值的对象

时间:2015-08-19 13:44:15

标签: python sqlalchemy flask-sqlalchemy

让我们考虑一下我们有这样的架构:

class Owner(db.Model):
    __tablename__ = 'owners'

    id = db.Column(db.Integer, nullable=False, primary_key=True, autoincrement=True)
    name = db.Column(db.Unicode(30), nullable=False)

    shares = db.relationship('Share', secondary=lambda: shares_owners, lazy="dynamic")

class Share(db.Model):
    __tablename__ = 'shares'

    id = db.Column(db.Integer, nullable=False, primary_key=True, autoincrement=True)
    apartment = db.Column(db.Integer, nullable=False)
    value = db.Column(db.Integer, nullable=False)

    owners = db.relationship('Owner', secondary=lambda: shares_owners, lazy="dynamic")

shares_owners = db.Table('shares_owners',
    db.Column('share_id', db.Integer, db.ForeignKey('shares.id')),
    db.Column('owner_id', db.Integer, db.ForeignKey('owners.id'))
)

过滤所有者拥有的股份是小菜一碟:

Share.query.join(shares_owners, Owner, User).filter(User.id == 1).all()

您可以使用func.sum轻松对值进行分组和求和,但是当您这样做时,sqlalchemy只返回求和字段。

有没有办法强制它返回Share对象(或基于Share的东西)并加总值?

理想情况下,我需要调用.summed()方法,而不是.one().first().all(),它会返回一些具有求和值的Share类似对象。

0 个答案:

没有答案