Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/297.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python SQLAlchemy循环依赖-如何解决它?_Python_Sqlalchemy_Circular Dependency - Fatal编程技术网

Python SQLAlchemy循环依赖-如何解决它?

Python SQLAlchemy循环依赖-如何解决它?,python,sqlalchemy,circular-dependency,Python,Sqlalchemy,Circular Dependency,我有两个表,新闻和文件: # 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):

我有两个表,
新闻
文件

# 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'))
添加
文件\u id\u徽标
fkey后,SQLalchemy引发了一个CircularDependencyError。 我已经在
logo
关系中尝试了
post\u update=True
,但它没有改变任何东西

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

以下情况是可能的(如有必要):

  • 一个文件没有或恰好分配了一条新闻
  • 如果一个文件没有新闻,那么该文件作为其徽标引用时也没有新闻
  • 一条新闻可以有多个文件,但其中只有一个文件可以是其
    徽标
  • 因此,如果一条新闻有一个
    徽标
    ,那么引用的文件也将该新闻作为其
    新闻

使用\u alter–传递给基础ForeignKeyConstraint,指示应从CREATE TABLE/DROP TABLE语句外部生成/删除约束。有关详细信息,请参见该类的构造函数


很好地消除了错误,但它打破了其他一些关系。所以我决定干脆扔掉外键。无论如何都要接受,因为答案本身是正确的。@ThiefMaster您可能只需要在关系上设置primaryjoin-当两个表之间存在多个关系/反向引用时,它们无法确定连接方向。我在这里找到了信息: