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

SQLAlchemy StaleDataError ao excluir itens inseridos via ORM sqlalchemy.orm.exc.StaleDataError


Acho que posso dar uma dica sobre este problema. A versão curta é:"Você provavelmente terá que modificar os dados no banco de dados manualmente para resolver o problema".

A versão mais longa:eu tive um problema semelhante com o SQLite. Eu tinha a seguinte tabela mapeada:
ingredients = Table('ingredients', metadata,
    Column('recipe_title', Unicode, ForeignKey('recipes.title'), primary_key=True),
    Column('product_title', Unicode, ForeignKey('products.title'), primary_key=True),
    Column('amount', Integer, nullable=False),
    Column('unit_title', Unicode, ForeignKey('units.title')))

ver essa chave primária composta? De alguma forma, consegui inserir duas linhas com o mesmo par recipe_title/product_title. Fiquei surpreso ao descobrir que não havia uma única restrição no lado do SQLite para esta tabela (sem chave primária, sem chave fereign - era apenas uma tabela de baunilha simples), mas bem - é assim que o sqlalchemy funciona, não meu o negócio.

Então, quando tentei excluir um objeto persistente envolvendo essas duas linhas, o sqlalchemy viu que suas restrições foram violadas e lançou o 'StaleDataError'. Finalmente, tive que remover manualmente uma linha duplicada da tabela SQLite.