簡體   English   中英

SQLAlchemy未檢測到_determine_joins上的ForeignKey,NoForeignKeysError

[英]SQLAlchemy not detecting ForeignKeys on _determine_joins, NoForeignKeysError

我遇到一個問題,當SQLAlchemy嘗試確定兩個表的主要聯接時,它將引發NoForeignKeysError。 奇怪的是,此問題僅發生在模型的第二個實例中(即,如果我刪除表並重新創建它們,則該函數在我第一次運行腳本時起作用,但在隨后的時間中不起作用)。 甚至更奇怪的是,如果我使用inspect來查看子表的ForeignKey,我可以清楚地看到它們的存在( psql ,僅查看聲明性庫的元數據也可以確認這一點)。 我的模型是由腳本生成的,並且具有相似或更復雜關系的所有其他表都可以按預期工作,但是只有這組特定的表才出現此問題。

它引發的特定錯誤是:

sqlalchemy.exc.NoForeignKeysError:找不到'task_statuses'和'task_data'之間的任何外鍵關系。

sqlalchemy.exc.NoForeignKeysError:無法確定關系task_statuses.task_data的父/子表之間的聯接條件-沒有鏈接這些表的外鍵。 確保引用列與ForeignKey或ForeignKeyConstraint關聯,或指定“ primaryjoin”表達式。

程式碼片段:

class TaskData(db_base):
    __tablename__ = 'task_data'
    __table_args__ = ({'extend_existing' : True})
    id = Column(Integer, primary_key=True)
    tags = relationship('TaskTags', backref='task_data', cascade='all, delete-orphan', passive_deletes=True)
    statuses = relationship('TaskStatuses', backref='task_data', cascade='all, delete-orphan', passive_deletes=True)

class TaskTags(db_base):
    __tablename__ = 'task_tags'
    __table_args__ = ({'extend_existing' : True})
    id = Column(Integer, primary_key=True)
    taskdata_id = Column(Integer, ForeignKey('task_data.id', ondelete='CASCADE'))

class TagStatuses(db_base):
    __tablename__ = 'task_statuses'
    __table_args__ = ({'extend_existing' : True})
    id = Column(Integer, primary_key=True)
    taskdata_id = Column(Integer, ForeignKey('task_data.id', ondelete='CASCADE'))

更新:

重新task_statuses錯誤消息后,我意識到SQLAlchemy似乎認為task_statuses是父表,而實際上它是子表。 那仍然沒有任何解釋,實際上更令人困惑,但可能值得注意。 即使指定了primaryjoin,錯誤仍然存​​在。

問題最終是由Graphene-SQLAlchemy引起的

無論出於何種原因,在同一文件中定義SQLAlchemy模型和Graphene-SQLAlchemy等效項都會導致SQLAlchemy出現某些意外行為。

通過將模型放置在其他文件中,然后在原始文件中生成所需的Graphene-SQLAlchemy對象,我解決了該問題

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM