Mysql
 sql >> Datenbank >  >> RDS >> Mysql

SQLAlchemy DELETE Fehler, der dadurch verursacht wird, dass sowohl Lazy-Load als auch eine dynamische Version derselben Beziehung vorhanden sind

Sowohl die Beziehungen Group.users als auch Group.users_dynamic versuchen, die Tatsache, dass die Gruppe gelöscht wird, mit der Möglichkeit in Einklang zu bringen, User() zu verwalten Objekte, auf die sie sich beziehen; Eine Beziehung ist erfolgreich, während die zweite fehlschlägt, da die Zeilen in der Zuordnungstabelle bereits gelöscht wurden. Die einfachste Lösung besteht darin, alle bis auf eine der identischen Beziehungen als nur sichtbar zu markieren:

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')

Wenn Sie immer noch möchten, dass beide Beziehungen ein gewisses Maß an Mutationen handhaben, müssen Sie dies sorgfältig tun, da SQLAlchemy nicht weiß, wie Änderungen in zwei Beziehungen gleichzeitig koordiniert werden sollen, sodass Konflikte wie diese weiterhin auftreten können passieren (wie doppelte Einfügungen usw.), wenn Sie in beiden Beziehungen gleichwertige Mutationen vornehmen. Um sich nur um das „Löschen“-Problem selbst zu kümmern, können Sie auch versuchen, Group.users_dynamic auf passive_deletes=True:

zu setzen
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')