SQLAlchemy 循环依赖 - 如何解决?

17

我有两个表,NewsFiles

# unrelated columns removed
class News(db.Model): 
    id = db.Column(db.Integer, primary_key=True)
    file_id_logo = db.Column(db.Integer, db.ForeignKey('files.id'))
    logo = db.relationship('File', lazy=False)

class File(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    news_id = db.Column(db.Integer, db.ForeignKey('news.id'))
    news = db.relationship('News', lazy=False, backref=db.backref('files'))

在添加了file_id_logo的外键后,SQLalchemy引发了CircularDependencyError错误。我已经尝试在logo关系中使用post_update=True,但没有改变任何内容。

有什么正确的解决方法吗?

以下情况可能会出现(在某些情况下可能很重要):

  • 一个文件没有或恰好分配了一个新闻。
  • 如果一个文件没有新闻,则也没有以此文件作为其标志的新闻。
  • 可以为单个新闻设置多个文件,但这些文件中只能有一个是其 logo
  • 因此,如果一条新闻有一个logo,则引用的文件也必须有此新闻作为其news
1个回答

24

解决了错误,但是破坏了其他关联。所以我决定直接删除ForeignKey。尽管如此,我还是接受了答案,因为它本身是正确的。 - ThiefMaster
3
您可能只需要在关系上设置primaryjoin - 当两个表之间存在多个关系或反向引用时,它们无法确定联接方向。 - thule
1
我在这里找到了相关信息:http://docs.sqlalchemy.org/en/rel_0_8/core/constraints.html - David C

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接