【问题标题】:flask sqlalchemy multiple foreign keys in relationship烧瓶 sqlalchemy 关系中的多个外键
【发布时间】:2016-09-06 11:27:53
【问题描述】:

您好,我正在使用烧瓶和 sqlalchemy,我正在尝试获取 Team 中的匹配关系以获取所有匹配项,无论它是 team1 还是 team2 (所以我想要的是能够通过matches属性获得给定球队的所有比赛,无论它是Match表中的team1还是team2),我得到了错误:

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')

【问题讨论】:

    标签: python python-2.7 python-3.x sqlalchemy flask-sqlalchemy


    【解决方案1】:

    我从#sqlalchemy irc 上的人那里得到了帮助,所以我采用了错误的方法,我现在与 primaryjoin 建立了关系:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-01-15
      • 2016-06-18
      • 1970-01-01
      • 2014-11-02
      • 2020-11-21
      • 2017-06-02
      • 2020-12-30
      相关资源
      最近更新 更多