所以我在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
您认为这是怎么回事? 很多!
答案 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]), {})