【问题标题】:SQLAlchemy: How to get grandchild attributes from grandparent?SQLAlchemy:如何从祖父母那里获取孙子属性?
【发布时间】:2016-12-15 16:44:33
【问题描述】:

每个League 有多个赛季,每个Season 有多个球队,每个Team 表有一个goals_for 列。

假设我想计算一个联赛中的所有goals_for所有球队,跨越所有个赛季。但我什至无法在赛季内访问球队。

以下返回一个 League 类型的项目:

get_teams_for_leagues = League.query.join(League.seasons).join(Season.teams).all()
print(get_teams_for_leagues)

如何从League 访问teams

class League(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    full_name = db.Column(db.String, nullable=False)

    # One side of many to one with Season
    seasons = relationship("Season", back_populates="league", lazy='joined')

    def __repr__(self):
        return '<League %r>' % (self.full_name)

class Season(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    season_string_form = db.Column(db.String, nullable=False)

    # Many side of many to one wih Season
    league_id = db.Column(db.Integer, ForeignKey('league.id'))
    league = relationship("League", back_populates="seasons")

    # One side of many to one with Team
    teams = relationship("Team", back_populates="season")

    def __repr__(self):
        return '<Season %r>' % (self.id)


class Team(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String, nullable=False)
    goals_for = db.Column(db.Integer, nullable=False)

    # Many side of many to one with Season
    season_id = db.Column(db.Integer, ForeignKey('season.id'))
    season = relationship("Season", back_populates="teams")

    def __repr__(self):
        return '<Team %r>' % (self.name)

【问题讨论】:

  • 你的模型是什么样的?请为其添加代码。
  • @MrLeeh 完成。谢谢。

标签: python sql flask sqlalchemy flask-sqlalchemy


【解决方案1】:

可能只是做一个聚合,比如:

from sqlalchemy.sql import func

res = db_session.query(func.sum(Team.goals_for), Team.name)\
         .join(Season).join(League)\
         .filter(League.full_name = 'La Liga')\
         .group_by(Team.name).all()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-09-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-14
    • 1970-01-01
    相关资源
    最近更新 更多