Flask foreign_keys 仍然显示 AmbiguousForeignKeysError

Posted

技术标签:

【中文标题】Flask foreign_keys 仍然显示 AmbiguousForeignKeysError【英文标题】:Flask foreign_keys still shows AmbiguousForeignKeysError 【发布时间】:2015-05-16 15:21:30 【问题描述】:

我在一个实体中有两个外键引用另一个实体。 这是它的外观

    class Review(db.Model):
      __tablename__ = 'Review'
      id = db.Column(db.Integer, primary_key = True)
      user_id = db.Column(db.Integer, db.ForeignKey('User.id'), nullable=False)
      business_user_id = db.Column(db.Integer, db.ForeignKey('User.id'), nullable=False)
      user = db.relationship('User', foreign_keys=[user_id])
      business_user = db.relationship('User', foreign_keys=[business_user_id])

class User(db.Model):
  __tablename__ = 'User'
  id = db.Column(db.Integer, primary_key = True)
  reviews = db.relationship('Review', backref='user',
                            lazy='dynamic')

但是,它仍然向我显示错误提示

有多个外键路径链接表。指定 'foreign_keys' 参数,提供那些列的列表 应计为包含对父级的外键引用 表

上述解决方法是我从其他一些帖子中得到的。我已经检查并更改了很多次,但仍然没有运气。我想知道它是否已经正确或有什么我想念的。需要帮助

【问题讨论】:

您找到解决方案了吗?我花了一些时间试图找到答案,但无法让它发挥作用。 【参考方案1】:

最后,我在尝试弄清楚后得到了解决方法。就我而言,我不必将 backref 放在 Review 类中。相反,我应该将 User backref 放在 User 类本身中。所以,它应该如下所示

class Review(db.Model):
  __tablename__ = 'Review'
  id = db.Column(db.Integer, primary_key = True)
  user_id = db.Column(db.Integer, db.ForeignKey('User.id'), nullable=False)
  business_user_id = db.Column(db.Integer, db.ForeignKey('User.id'), nullable=False)
  user = relationship('User', backref='user_reviews', foreign_keys=user_id)
  business_user = relationship("User", backref='business_user_reviews', foreign_keys=[business_user_id])

class User(db.Model):
  __tablename__ = 'User'
  id = db.Column(db.Integer, primary_key = True)

在这里,两种类型的用户都有很多评论。然后,当我需要获取User的评论列表时,我能做的是

user = User.query.get(id)
user_reviews = User.user_reviews
business_user_reviews = user.business_user_reviews

我不再遇到此错误。

【讨论】:

以上是关于Flask foreign_keys 仍然显示 AmbiguousForeignKeysError的主要内容,如果未能解决你的问题,请参考以下文章

将 foreign_key 值传递给 Rails 控制器的更好方法

如何使用Flask展示特定文件中的所有图像?

用flask-failsafe实现出现语法错误时flask仍然自带重启

sql 删除对FOREIGN_KEY的支票

Flask-Login 在使用 remember_me 时使用注销后仍然登录

sql sql__foreign_key.sql