SQLAlchemy循环依赖-如何解决?

问题描述 投票:18回答:1

我有两个表,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 fkey之后,SQLalchemy引发了CircularDependencyError。我已经在post_update=True关系中尝试过logo,但它没有任何改变。

解决此问题的正确方法是什么?

以下情况是可能的(如果有关系):

  • 一个文件没有分配或仅分配了一个新闻。
  • 如果文件没有新闻,则也没有新闻,此文件被称为其徽标。
  • 单个新闻可能有多个文件,但是这些文件中只有一个是logo
  • 因此,如果新闻有logo,则引用的文件也将此新闻作为其news
python sqlalchemy circular-dependency
1个回答
23
投票

use_alter –传递给基础的ForeignKeyConstraint,以指示应从CREATE TABLE / DROP TABLE语句在外部生成/删除约束。有关详情,请参见该类的构造函数。

https://docs.sqlalchemy.org/en/13/core/constraints.html#sqlalchemy.schema.ForeignKeyConstraint.params.use_alter

© www.soinside.com 2019 - 2024. All rights reserved.