Group.usersとGroup.users_dynamicの両方の関係が、グループが削除されているという事実と、User()
を管理できることを調整しようとしています。 それらが参照するオブジェクト。関連付けテーブルの行がすでに削除されているため、1つの関係は成功し、2番目の関係は失敗します。最も簡単な解決策は、1つを除くすべての同一の関係をviewonlyとしてマークすることです。
class Group(Base):
__tablename__ = 'groups'
id = Column(Integer, primary_key=True)
users = relationship('User', secondary=users_groups, lazy='select', backref='groups')
users_dynamic = relationship('User', viewonly=True, secondary=users_groups, lazy='dynamic')
それでも両方の関係にある程度の突然変異を処理させたい場合は、SQLAlchemyが2つの関係の変更を同時に調整する方法を知らないため、これを慎重に行う必要があります。そのため、このような競合は継続する可能性があります。両方の関係で同等のミューテーションを行うと(二重挿入など)発生します。 「削除」の問題を単独で処理するには、Group.users_dynamicをpassive_deletes =Trueに設定してみることもできます:
class Group(Base):
__tablename__ = 'groups'
id = Column(Integer, primary_key=True)
users = relationship('User', secondary=users_groups, lazy='select', backref='groups')
users_dynamic = relationship('User', passive_deletes=True, secondary=users_groups, lazy='dynamic')