[英]flask sqlalchemy.exc.NoForeignKeysError NoForeignKeysError: Could not determine join condition
[英]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.