sql >> Base de Datos >  >> RDS >> Mysql

SQLAlchemy DELETE Error causado por tener una carga diferida Y una versión dinámica de la misma relación

tanto las relaciones Group.users como Group.users_dynamic están intentando reconciliar el hecho de que el grupo se está eliminando junto con la posibilidad de administrar el User() objetos a los que se refieren; una relación tiene éxito mientras que la segunda falla, ya que las filas de la tabla de asociaciones ya se eliminaron. La solución más directa es marcar todas menos una de las relaciones idénticas como solo visualización:

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

si aún desea que ambas relaciones manejen algún grado de mutaciones, deberá hacerlo con cuidado ya que SQLAlchemy no sabe cómo coordinar los cambios en dos relaciones al mismo tiempo, por lo que conflictos como este pueden continuar ocurrir (como inserciones dobles, etc.) si realiza mutaciones equivalentes en ambas relaciones. Para encargarse del problema de "eliminar" por sí mismo, también puede intentar configurar Group.users_dynamic en pasiva_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')