2016-12-13 4 views
0

ここでAmbigiousForeignKeyErrorを回避することはできません。ここでは両方の関係は Sqlalchemy同じスキーマ(およびバックリファレンス)間で複数の一対一の関係を定義

私は

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]) 

を扱ってるものを、この背後にある考え方は、時間に関連する情報を格納したノードの変更オブジェクトを介してノードオブジェクトを横断するある現在(など変更可能なかではありません)

ここでは1対1です。 prev_changenext_changeのバックリーフを除外してこの作業を行っていますが、 AmbigiousForeignKeyErrorに遭遇することなく2ウェイ関係を動作させることはできません。

答えて

1

この問題を解決する最も簡単な方法があることになりそうだ。

  1. old_nodenew_node

にこれがどのように新しいですbackrefとしてNode

  • からprev_changenext_change関係はそれらを追加、削除関係は次のようになります。

    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), 
    ) 
    
  • 関連する問題