Sqlalchemy定义相同模式(和backref)之间的多个一对一关系

时间:2016-12-13 23:45:23

标签: python sqlalchemy

我似乎无法绕过AmbigiousForeignKeyError。目前我正在处理

class Node(Base):

    __tablename__ = 'nodes'

    id = Column(Integer, primary_key=true)

    prev_change = relationship("NodeChange", back_populates="new_node", uselist=False)
    next_change = relationship("NodeChange", back_populates="old_node", uselist=False)

Class NodeChange(Base):

    __tablename__ = "node_changes"
    id = Column(Integer, primary_key=true)
    date = Column(Date)

    old_node_id = Column(Integer, ForeignKey('nodes.id'))
    old_node = relationship("Node", foreign_keys=[old_node_id])

    new_node_id = Column(Integer, ForeignKey('nodes.id'))
    new_node = relationship("Node", foreign_keys=[new_node_id])

这背后的想法是通过存储时间相关信息的节点更改对象遍历节点对象(更改是否可行等)。

这里的两种关系都是一对一的。我在排除prev_changenext_change背景时已经完成了这项工作,但是在没有遇到AmbigiousForeignKeyError的情况下无法使双向关系正常工作。

1 个答案:

答案 0 :(得分:1)

解决此问题的最简单方法是:

  1. prev_change
  2. 中删除next_changeNode关系
  3. backref添加到old_nodenew_node
  4. 这就是新关系的样子:

    old_node = relationship(
        "Node", foreign_keys=[old_node_id],
        backref=backref('prev_change', uselist=False),
    )
    
    new_node = relationship(
        "Node", foreign_keys=[new_node_id],
        backref=backref('next_change', uselist=False),
    )