A と B という 2 つのテーブルがあります。どちらにも主キー ID があります。それらは多対多の関係、SEC を持っています。
SEC = Table('sec', Base.metadata,
Column('a_id', Integer, ForeignKey('A.id'), primary_key=True, nullable=False),
Column('b_id', Integer, ForeignKey('B.id'), primary_key=True, nullable=False)
)
class A():
...
id = Column(Integer, primary_key=True)
...
rels = relationship(B, secondary=SEC)
class B():
...
id = Column(Integer, primary_key=True)
...
このコードについて考えてみましょう。
a = A()
b1 = B()
b2 = B()
a.rels = [b1, b2]
...
#some place later
b3 = B()
a.rels = [b1, b3] # errors sometimes
時々、最後の行でエラーが発生します
duplicate key value violates unique constraint a_b_pkey
私の理解では、(a.id、b.id)を「sec」テーブルに再度追加しようとすると、一意の制約エラーが発生すると思います。そういうことですか?もしそうなら、どうすればこれを回避できますか?そうでない場合、なぜこのエラーが発生するのですか?