[英]Flask-AppBuilder Many-to-Many relationship within the same Table
我在同一個表之間有很多關系,並希望在 Flask-AppBuilder 中定義它們。 例如,人類之間的父子關系,其中兩個實例都屬於同一個表“Human”。 但是,當我這樣做時,我收到錯誤消息:
sqlalchemy.exc.NoForeignKeysError:無法確定關系 Human.child 的父/子表之間的連接條件 - 沒有鏈接這些表的外鍵。 確保引用列與 ForeignKey 或 ForeignKeyConstraint 關聯,或指定“primaryjoin”表達式。
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() 注釋進行注釋。
如何在同一個表中建立多對多關系?
遵循SQLAlchemy Many-to-Many Relationship on a Single Table ,答案是:
from flask_appbuilder import Model
from sqlalchemy import Column, String, ForeignKey, Table
from sqlalchemy.orm import relationship
HumanHasChild = Table("HumanHashChild",Model.metadata,
Column("parent_id",String(200), ForeignKey("Human.id"), primary_key=True),
Column("child_id",String(200), ForeignKey("Human.id"), primary_key=True)
)
class Human(Model):
id = Column(String(200), primary_key=True)
child = relationship("Human",
secondary=HumanHasChild,
foreign_keys = [HumanHasChild.c.parent_id,HumanHasChild.c.child_id],
primaryjoin=id==HumanHasChild.c.parent_id,
secondaryjoin=id==HumanHasChild.c.child_id,
backref="children")
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.