zarówno relacje Group.users, jak i Group.users_dynamic próbują pogodzić fakt, że grupa jest usuwana wraz z możliwością zarządzania User()
przedmioty, do których się odnoszą; jedna relacja powiodła się, a druga nie, ponieważ wiersze w tabeli asocjacji zostały już usunięte. Najprostszym rozwiązaniem jest oznaczenie wszystkich identycznych relacji z wyjątkiem jednej jako tylko do wyświetlania:
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')
jeśli nadal chcesz, aby obie relacje obsługiwały pewien stopień mutacji, musisz zrobić to ostrożnie, ponieważ SQLAlchemy nie wie, jak koordynować zmiany w dwóch relacjach w tym samym czasie, więc konflikty takie jak ten mogą trwać zdarzają się (jak podwójne wstawki itp.), jeśli dokonasz równoważnych mutacji w obu relacjach. Aby samodzielnie zająć się problemem „usuwania”, możesz również spróbować ustawić Group.users_dynamic na pasyw_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')