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

SQLAlchemy StaleDataError sull'eliminazione di elementi inseriti tramite ORM sqlalchemy.orm.exc.StaleDataError

Credo di poter dare un suggerimento su questo problema. La versione breve è:"Probabilmente dovrai modificare manualmente i dati nel Database per risolvere il problema".

La versione più lunga:ho avuto un problema simile con SQLite. Ho mappato la seguente tabella:

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

vedi quella chiave primaria composita? In qualche modo sono riuscito a inserire due righe con la stessa coppia ricetta_titolo/titolo_prodotto. Sono rimasto sorpreso di scoprire che non c'era un solo vincolo sul lato di SQLite per questa tabella (nessuna chiave primaria, nessuna chiave fereign - era solo una semplice tabella vanilla), ma beh - è così che va sqlalchemy, non il mio affari.

Quindi, quando ho provato a eliminare un oggetto persistente che coinvolge quelle due righe, sqlalchemy ha visto che i suoi vincoli erano stati violati e ha lanciato "StaleDataError". Alla fine ho dovuto rimuovere manualmente una riga duplicata dalla tabella SQLite.