基本的なユースケースに遭遇しました。ノードとネットワークの2つのテーブルがあり、2番目の関連付けテーブルとして3番目のテーブルIPAddrを使用して相互接続されています。
class Node(Base, BasicValidator):
__tablename__ = 'nodes'
id = Column(Integer, primary_key=True)
class IPAddr(Base):
__tablename__ = 'ip_addrs'
id = Column(Integer, primary_key=True)
network = Column(Integer, ForeignKey('networks.id'))
node = Column(Integer, ForeignKey('nodes.id'))
ip_addr = Column(String(25), nullable=False)
class Network(Base, BasicValidator):
__tablename__ = 'networks'
id = Column(Integer, primary_key=True)
nodes = relationship(
"Node",
secondary=IPAddr.__table__,
backref="networks")
データベースからネットワークオブジェクトを削除しているときに、次のエラーが発生します。
詳細:キー(id)=(9)は引き続きテーブル"ip_addrs"から参照されます。'ネットワークから削除WHEREnetworks.id=%(id)s'({'id':6}、{'id':7}、{'id':8}、{'id':9}、{' id':10})
私がする必要があるのは、ネットワークとIPAddrの両方を削除している間ノードを保持することです。
私はこれを試しました:http://docs.sqlalchemy.org/en/rel_0_7/orm/relationships.html#association-objectしかし、AssociacionProxyを使用しても、今回はすべて機能しますが、Network.nodesが[なし]このようなことをしてからノードを削除した場合:
class Node(Base, BasicValidator):
__tablename__ = 'nodes'
id = Column(Integer, primary_key=True)
class IPAddr(Base):
__tablename__ = 'ip_addrs'
id = Column(Integer, primary_key=True)
network = Column(Integer, ForeignKey('networks.id'))
node = Column(Integer, ForeignKey('nodes.id'))
nodes = relationship("Node", backref="networks_assocs")
ip_addr = Column(String(25), nullable=False)
class Network(Base, BasicValidator):
__tablename__ = 'networks'
id = Column(Integer, primary_key=True)
nd = relationship("IPAddr", backref="networks")
nodes = association_proxy('nd', 'nodes')
誰かが助けてくれますか、それを行うための適切な方法は何ですか?