entrambe le relazioni Group.users e Group.users_dynamic stanno tentando di riconciliare il fatto che il gruppo viene eliminato insieme alla possibilità di gestire User()
oggetti a cui si riferiscono; una relazione ha esito positivo mentre la seconda ha esito negativo, poiché le righe nella tabella di associazione erano già state eliminate. La soluzione più semplice è contrassegnare tutte le relazioni identiche tranne una come 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')
se vuoi ancora che entrambe le relazioni gestiscano un certo grado di mutazioni, dovresti farlo con attenzione poiché SQLAlchemy non sa come coordinare i cambiamenti in due relazioni contemporaneamente, quindi conflitti come questo possono continuare a accadono (come doppi inserti, ecc.) se si apportano mutazioni equivalenti su entrambe le relazioni. Per occuparti del problema "cancella" da solo, puoi anche provare a impostare Group.users_dynamic su 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')