我正在尝试创建个人资料的表格,其中个人资料,测试和文件夹可以是个人资料的子级,但我收到的是 AmbiguousForeignKeysError 当我致电create_all(db)
时。我对单个表的想法,然后通过映射器或关联表引用自己似乎它应该工作,但我还没有能够得到sqlalchemy合作。我在sqlalchemy网站上使用了多对多关系的示例来创建我的代码。这是我的片段:
from sqlalchemy import Column, Integer, String, Enum, Table, ForeignKey
from sqlalchemy.orm import relationship,validates
from core.coyote.models import Base #declarative base
association_table = Table('association', Base.metadata,
Column('left_id', Integer, ForeignKey('profile_member.id')),
Column('right_id', Integer, ForeignKey('profile_member.id'))
)
class ProfileMember(Base):
__tablename__ = "profile_member"
id = Column(Integer, primary_key=True)
name = Column(String(250),nullable=True)
type = Column(Enum("Test","Profile","Folder"))
children = relationship("ProfileMember",secondary=association_table)
我还计划输入一些验证码,以便我可以执行一些父母规则。以下是我得到的完整错误:
sqlalchemy.exc.AmbiguousForeignKeysError:无法确定关系ProfileMember.children上的父/子表之间的连接条件 - 有多个外键路径通过辅助表'关联表连接表。指定' foreign_keys'参数,提供这些列的列表,这些列应该被计为包含从辅助表到每个父表和子表的外键引用
我可以尝试任何有关我可以尝试的事情的线索。
答案 0 :(得分:1)
您必须指定如何加入辅助表:
children = relationship("ProfileMember", secondary=association_table,
primaryjoin=id == association_table.c.left_id,
secondaryjoin=association_table.c.right_id == id)