簡體   English   中英

flask sqlalchemy關系中的多個外鍵

[英]flask sqlalchemy multiple foreign keys in relationship

嗨,我是用瓶和SQLAlchemy的,我試圖讓球隊的比賽關系到讓所有的比賽是否是TEAM1TEAM2(所以我想要的是能夠通過獲得所有比賽的球隊給出匹配屬性,無論它是否TEAM1TEAM2Match表),我得到的錯誤:

sqlalchemy.exc.AmbiguousForeignKeysError:無法確定關系Team.matches的父/子表之間的聯接條件

有多個鏈接表的外鍵路徑。 指定foreign_keys參數,提供這些列的列表,這些列應被視為包含對父表的外鍵引用。

class Match(db.Model):
  id = db.Column(db.Integer, primary_key=True)
  map = db.Column(db.String(80), index=True)
  date = db.Column(db.DateTime, index=True)
  agreed = db.Column(db.Boolean)
  done = db.Column(db.Boolean)
  ladder_id = db.Column(db.Integer, db.ForeignKey('ladder.id'))
  team1_id = db.Column(db.Integer, db.ForeignKey('team.id'))
  team2_id = db.Column(db.Integer, db.ForeignKey('team.id'))
  team1_rounds = db.Column(db.Integer)
  team2_rounds = db.Column(db.Integer)
  team1_accepted_score = db.Column(db.Boolean)
  team2_accepted_score = db.Column(db.Boolean)
  points = db.Column(db.Integer)

  team1 = db.relationship('Team', foreign_keys='Match.team1_id')
  team2 = db.relationship('Team', foreign_keys='Match.team2_id')

class Team(db.Model):
  id = db.Column(db.Integer, primary_key=True)
  name = db.Column(db.String(80), index=True)
  tag = db.Column(db.String(20), index=True, unique=True)
  captain_id = db.Column(db.Integer, db.ForeignKey('user.id'))
  captain = db.relationship('User', uselist=False,
               foreign_keys='Team.captain_id')
  members = db.relationship('User', backref='team',
                foreign_keys='User.team_id', lazy='dynamic')
  matches = db.relationship('Match',
                 foreign_keys='[Match.team1_id, Match.team2_id]', lazy='dynamic')

我在#sqlalchemy irc上得到了家伙的幫助,所以我使用了錯誤的方法,現在我改為與primaryjoin建立關系:

matches = db.relationship('Match', primaryjoin="or_(Team.id==Match.team1_id, Team.id==Match.team2_id)", lazy='dynamic')

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM