【发布时间】:2021-06-07 13:55:28
【问题描述】:
我在 Flask SQLAlchemy 中的多对多关系存在问题。我对它的工作原理有一个大致的了解,但我似乎无法理解我的示例。 我正在制作一个网球记分应用程序,我目前有两个模型,Player 和 Score 以及中间表 Match(玩家可以互相挑战并跟踪他们参加的比赛)。问题是我的中间表有三列指向 Player 类中的同一列(玩家 id),我不知道如何制作关系列。到目前为止我的代码如下:
match = db.Table("match",
db.Model.metadata,
db.Column("id", db.Integer, primary_key=True),
db.Column("player1", db.Integer, db.ForeignKey("players.id")),
db.Column("player2", db.Integer, db.ForeignKey("players.id")),
db.Column("score", db.Integer, db.ForeignKey("scores.id")),
db.Column("winner", db.Integer, db.ForeignKey("players.id"))
)
class Player(db.Model):
__tablename__ = "players"
id = db.Column(db.Integer, primary_key=True)
fullname = db.Column(db.String)
# scores = db.relationship("Score", secondary=match)
class Score(db.Model):
__tablename__ = "scores"
id = db.Column(db.Integer, primary_key=True)
score = db.Column(db.String)
date = db.Column(db.String)
# players = db.relationship("Player", secondary=match)
我知道我应该将 Player 和 Score 类中的关系显示到匹配表(注释掉的部分),但如果我尝试创建它,它会给我以下错误:
“AmbiguousForeignKeysError:无法确定关系 Player.scores 上的父/子表之间的连接条件 - 有多个外键路径通过辅助表“匹配”链接表。指定“外键”参数,提供这些表的列表应计为包含从辅助表到每个父表和子表的外键引用的列。"
如果我在没有“分数”和“玩家”列的情况下创建它,它会很好地创建它,但是我无法查询中间表或向其中添加行。 (或者如果可能的话,我真的不知道怎么做)
有人可以解释我做错了什么吗?总的来说,我了解多对多关系应该如何工作,但我就是无法理解我应该在这里做什么。 困惑地尖叫
【问题讨论】:
标签: many-to-many flask-sqlalchemy