Mysql
 sql >> Database >  >> RDS >> Mysql

SQLAlchemy DELETE Errore causato dalla presenza sia di un lazy-load che di una versione dinamica della stessa relazione

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