Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

SQLAlchemy DELETE Erro causado por ter um carregamento lento E uma versão dinâmica do mesmo relacionamento


os relacionamentos Group.users e Group.users_dynamic estão tentando reconciliar o fato de que o Grupo está sendo excluído com a capacidade de gerenciar o User() objetos a que se referem; um relacionamento é bem-sucedido enquanto o segundo falha, pois as linhas na tabela de associação já foram excluídas. A solução mais direta é marcar todos os relacionamentos idênticos, exceto um, como somente visualização:
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 você ainda deseja que ambos os relacionamentos lidem com algum grau de mutações, você precisa fazer isso com cuidado, pois o SQLAlchemy não sabe como coordenar as alterações em dois relacionamentos ao mesmo tempo, portanto, conflitos como esse podem continuar acontecer (como inserções duplas, etc) se você fizer mutações equivalentes em ambos os relacionamentos. Para resolver o problema de "exclusão" por si só, você também pode tentar definir Group.users_dynamic como passiva_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')