SQLAlchemy中的多对多递归表定义导致AmbiguousForeignKeysError

时间:2016-02-18 20:07:11

标签: python sqlalchemy many-to-many

我正在尝试创建个人资料的表格,其中个人资料,测试和文件夹可以是个人资料的子级,但我收到的是 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'参数,提供这些列的列表,这些列应该被计为包含从辅助表到每个父表和子表的外键引用

我可以尝试任何有关我可以尝试的事情的线索。

1 个答案:

答案 0 :(得分:1)

您必须指定如何加入辅助表:

children = relationship("ProfileMember", secondary=association_table,
                        primaryjoin=id == association_table.c.left_id,
                        secondaryjoin=association_table.c.right_id == id)