我在同一个表之间有多对多的关系,并想在 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")
与错误消息相反,我确实指定了外键三次。但是我也尝试添加显式连接条件:
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.child 上找不到主连接条件“human.id = human_has_child.parent_id”的任何相关外键列。确保引用列与 ForeignKey 或 ForeignKeyConstraint 相关联,或者在连接条件中使用 foreign() 注释进行注释。
如何使同一张表中的多对多关系起作用?