Mysql
 sql >> Base de données >  >> RDS >> Mysql

SQLAlchemy StaleDataError lors de la suppression d'éléments insérés via ORM sqlalchemy.orm.exc.StaleDataError

Je suppose que je peux donner un indice sur ce problème. La version courte est :"Vous devrez probablement modifier manuellement les données de la base de données pour résoudre le problème".

La version plus longue :j'ai eu un problème similaire avec SQLite. J'ai fait mapper le tableau suivant :

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

voir cette clé primaire composite ? J'ai en quelque sorte réussi à insérer deux lignes avec la même paire de titre_recette/titre_produit. J'ai été surpris de découvrir qu'il n'y avait pas une seule contrainte du côté de SQLite pour cette table (pas de clé primaire, pas de clé étrangère - c'était juste une simple table vanille), mais bon - c'est ainsi que va sqlalchemy, pas mon entreprise.

Ensuite, lorsque j'ai essayé de supprimer un objet persistant impliquant ces deux lignes, sqlalchemy a vu que ses contraintes étaient violées et il a lancé le 'StaleDataError'. Enfin, je n'ai eu qu'à supprimer manuellement une ligne dupliquée de la table SQLite.