【发布时间】:2020-12-26 21:03:53
【问题描述】:
我在同一个表之间有多对多的关系,并想在 Flask-AppBuilder 中定义它们。例如,人类之间的父子关系,其中两个实例都属于同一个表“人类”。但是,当我这样做时,我得到了错误:
错误
sqlalchemy.exc.NoForeignKeysError: 无法确定连接条件 在关系 Human.child 的父/子表之间 - 没有 链接这些表的外键。确保引用列 与 ForeignKey 或 ForeignKeyConstraint 相关联,或指定一个 'primaryjoin' 表达式。
示例模型.py
>from flask_appbuilder import Model
from sqlalchemy import Column, String, ForeignKey
from sqlalchemy.orm import relationship
class HumanHasChild(Model):
parent_id = Column(String(200), ForeignKey("Human.id"), primary_key=True)
child_id = Column(String(200), ForeignKey("Human.id"), primary_key=True)
class Human(Model):
id = Column(String(200), primary_key=True)
child = relationship("HumanHasChild", foreign_keys="HumanHasChild.child_id")
与错误消息相反,我确实指定了外键 3 次。但是我也尝试添加显式连接条件:
class Human(Model):
id = Column(String(200), primary_key=True)
child = relationship("HumanHasChild", foreign_keys="HumanHasChild.child_id",primaryjoin="Human.id==HumanHasChild.parent_id")
但是即使这样我也会收到错误:
sqlalchemy.exc.ArgumentError: 找不到任何相关的外国 主连接条件“human.id =”的键列 human_has_child.parent_id' 关于 Human.child 的关系。确保这件事 引用列与 ForeignKey 或 ForeignKeyConstraint,或者在连接条件中用 foreign() 注释。
如何使同一个表中的多对多关系起作用?
【问题讨论】:
标签: python sqlalchemy flask-appbuilder