SQLAlchemy循环依赖 - 如何解决?

Thi*_*ter 18 python sqlalchemy circular-dependency

我有两张桌子,News并且Files:

# 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'))
Run Code Online (Sandbox Code Playgroud)

添加file_id_logofkey后,SQLalchemy引发了CircularDependencyError.我已经尝试post_update=Truelogo关系,但它没有改变任何东西.

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

以下情况是可能的(如果重要):

  • 文件没有或只分配了一个新闻.
  • 如果文件没有新闻,则也没有将此文件作为其徽标引用的新闻.
  • 单个新闻可以有多个文件,但这些文件中只有一个可以是它logo.
  • 因此,如果一个新闻有一个logo,引用的文件也有这个新闻news.

sec*_*119 23

use_alter - 传递给底层的ForeignKeyConstraint,指示应该从CREATE TABLE/DROP TABLE语句外部生成/删除约束.有关详细信息,请参阅该类的构造函数.

http://docs.sqlalchemy.org/en/rel_0_8/core/schema.html?highlight=use_alter#foreign-key-api-constructs

  • @ThiefMaster你可能只需要在你的关系上设置primaryjoin - 当两个表之间存在多个关系/ backref时,它们无法确定连接方向. (2认同)