2016-12-15 23 views
0

Leagueには多くの季節があり、Seasonには多数のチームがあり、Teamテーブルにはそれぞれgoals_forの列があります。SQLAlchemy:grandparent属性をgrandparentから取得する方法は?

は私がすべて季節を越え、リーグ内のすべてのgoals_forすべてのチームをカウントするとします。しかし、私は季節内からチームにアクセスすることさえ止められています。

次は、タイプリーグの項目を返します。私はLeagueからteamsにアクセスするにはどうすればよい

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

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) 
+0

を、あなたのモデルはどのようなものが見えますか?そのコードを追加してください。 – MrLeeh

+0

@MrLeeh Done。ありがとうございました。 – zerohedge

答えて

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() 
関連する問題