让我们考虑一下我们有这样的架构:
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
类似对象。