我四处寻找类似主题的帮助,但无法找到解决我的涉及 SQLAlchemy/Flask-SQLAlchemy 问题的正确解决方案。
情况如下:我有 3 个处理抽奖券数据的表。这些 table 如下: raffles
table :
class RaffleModel(db.Model):
__tablename__ = 'raffles'
id = db.Column(db.Integer, primary_key=True)
# relationship to users
user_id = db.Column(db.Integer, db.ForeignKey('users.id'))
user = db.relationship("UserModel", backref="raffles")
# relationship to ticket_md
ticket_md_id = db.Column(db.Integer, db.ForeignKey('ticket_mds.id'))
ticket_md = db.relationship("TicketMetaDataModel", backref="raffles")
def __init__(self, user, ticket_md):
self.user = user
self.ticket_md = ticket_md
使用以下示例数据:
id user_id ticket_md_id
1 1 1
2 2 1
3 3 1
4 1 2
5 2 2
用户
表:
class UserModel(db.Model):
__tablename__ = 'users'
id = db.Column(db.Integer, primary_key=True)
first_name = db.Column(db.String(25))
last_name = db.Column(db.String(25))
won = db.Column(db.Boolean, default=False, nullable=False)
# has backref via user.raffles
def __init__(self, first_name, last_name, won):
self.first_name = first_name
self.last_name = last_name
self.won = won
使用以下示例数据:
id first_name last_name won
1 Rob Stark False
2 Stan Clark False
3 Tom Dark False
最后是一个 ticket_mds
表:
class TicketMetaDataModel(db.Model):
__tablename__ = 'ticket_mds'
id = db.Column(db.Integer, primary_key=True)
raffle_type = db.Column(db.String(20))
description = db.Column(db.String(200))
modifier = db.Column(db.Integer)
# has backref via ticket_md.raffles
def __init__(self, raffle_type, description, modifier):
self.raffle_type = raffle_type
self.description = description
self.modifier = modifier
使用以下示例数据:
id raffle_type description modifier
1 type_1 blah blah 21
2 type_2 blah blah 5
我的问题在于,我似乎无法完全弄清楚一个查询来获取由用户分组的票点总和(基于 TicketMetaDataModel.modifier
属性)莱佛士表以以下格式返回结果:
名字
、姓氏
、总点数
、
例如:
Rob Stark 26
Stan Clark 26
Tom Dark 21
我已尝试以下操作(但无法进一步实现):
query = db.session.query(RaffleModel.id, UserModel.first_name, UserModel.last_name, TicketMetaDataModel.modifier)
query = query.join(UserModel).join(TicketMetaDataModel)
results = query.all()
results equals:
[(1, 'Rob', 'Stark', 21), (2, 'Stan', 'Clark', 21), (3, 'Tom', 'Dark', 21),(4, 'Rob', 'Stark', 5), (5, 'Stan', 'Clark', 5)]
最佳答案
如果我答对了你的问题。您正在尝试按已通过连接获得的值进行分组。
from sqlalchemy import func
query = db.session.query(UserModel.first_name, UserModel.last_name, func.sum(TicketMetaDataModel.modifier))
query = query.join(RaffleModel,RaffleModel.user_id==UserModel.id).join(RaffleModel.ticket_md_id==TicketMetaDataModel.id)
.group_by(UserModel.first_name, UserModel.last_name)
它应该给你所需的结果
关于python - 简单链接表所需的 SQLAlchemy group_by() 求和帮助,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50412525/