0

私が実験しているデータベースでは、MatchTeamの関係をM2Mから2対1の関係に変更することをお勧めしました。論理:各試合には2つのチームしかありません。SQLAlchemy:ダブル1対1リレーションシップ宣言

私はこれを実装する方法を頭に入れて苦労しています。models.py;ここで私は今のところ(簡略)得たものです:

class Match(db.Model): 
    id = db.Column(db.String, primary_key=True) 


    # One to One x2 with Team 
    hometeam_id = db.Column(db.Integer, db.ForeignKey('team.id')) 
    awayteam_id = db.Column(db.Integer, db.ForeignKey('team.id')) 
    team = db.relationship("Team", back_populates="match") 

    hoemteam_goals = db.Column(db.Integer, nullable=False) 
    awayteam_goals = db.Column(db.Integer, nullable=False) 

class Team(db.Model): 

    id = db.Column(db.Integer, primary_key=True) 
    name = db.Column(db.String, nullable=False) 
    points = db.Column(db.Integer) 
    matches_played = db.Column(db.Integer) 

    # Many side of M2M With Match 
    match = relationship("Match", back_populates="team", uselist=False) 

特にMatch側のrelationship秒の宣言では、ここに欠けている何かがあるようです。

答えて

0

溶液をそれぞれ一対一の関係のための関係参照を追加し、使用するIDを指定するために、relationshipforeign_keys引数を使用することである。

class Match(db.Model): 
    id = db.Column(db.String, primary_key=True) 

    # One to One x2 with Team 
    hometeam_id = db.Column(db.Integer, db.ForeignKey('team.id')) 
    awayteam_id = db.Column(db.Integer, db.ForeignKey('team.id')) 
    hometeam = db.relationship("Team", foreign_keys=[hometeam_id]) 
    awayteam = db.relationship("Team", foreign_keys=[awayteam_id]) 

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

    # No backreferences, use a query to figure that out 

そのまま私はmatch関係を削除しましたここでは役に立たない、IMHO。

関連ドキュメントは次のとおりです。http://docs.sqlalchemy.org/en/latest/orm/join_conditions.html#relationship-foreign-keys

関連する問題