SQLAlchemy关系错误与一对多rel

时间:2013-03-20 18:15:13

标签: python mysql sqlalchemy one-to-many

所以我在SQLAlchemy(0.8)中有这种一对多的关系:

class Parent(Base):

    __tablename__ = "parents"

    cid = Column(Integer(11), primary_key = True, autoincrement = False)
    uid = Column(Integer(11), ForeignKey('otherTable.uid',
           ondelete = 'CASCADE'), primary_key = True)
    ...

    # Relationship with child
    childs_rel = relationship("Child", backref = 'parents', 
                              cascade = "all, delete-orphan")

class Child(Base):

    __tablename__ = "childs"

    mid = Column(Integer(11), primary_key = True, autoincrement = False)
    cid = Column(Integer(11), ForeignKey('parents.cid',
           ondelete = 'CASCADE'), primary_key = True)
    uid = Column(Integer(11), ForeignKey('parents.uid',
           ondelete = 'CASCADE'), primary_key = True)
    ...

我可以创建这个数据库,但是当我尝试操作它时,我收到了这个错误:

  

sqlalchemy.exc.AmbiguousForeignKeysError:无法确定加入   关系Parent.childs_rel上的父/子表之间的条件    - 链接表有多个外键路径。指定'foreign_keys'参数,提供这些列的列表   应计为包含对父项的外键引用   表

我试图在childs_rel中指定'foreign_keys',但是在父类中没有外键,这是真的......必须在子类中指定但是根据SQLAlchemy的ORM文档,定义了关系在“一对多”的“一”中......

http://docs.sqlalchemy.org/en/rel_0_8/orm/relationships.html#one-to-many

您认为这是怎么回事? 很多!

1 个答案:

答案 0 :(得分:2)

我想我知道这里发生了什么:

  

请注意,您无法定义“复合”外键约束   是多个父/子列的分组之间的约束,   使用ForeignKey对象。要定义此分组,请执行此操作   必须使用ForeignKeyConstraint对象,并将其应用于表。   相关的ForeignKey对象是自动创建的。

对不起伙计们。不管怎样,谢谢! :d

编辑:这是我需要它的人的解决方案:

class Child(Base):

    __tablename__ = "childs"

    mid = Column(Integer(11), primary_key = True, autoincrement = False)
    cid = Column(Integer(11), primary_key = True)
    uid = Column(Integer(11), primary_key = True)

    __table_args__ = (ForeignKeyConstraint([cid, uid], [Parent.cid, Parent.uid]), {})