Mysql
 sql >> Datenbank >  >> RDS >> Mysql

SQLAlchemy StaleDataError beim Löschen von Elementen, die über ORM sqlalchemy.orm.exc.StaleDataError eingefügt wurden

Ich glaube, ich kann einen Hinweis geben zu diesem Problem. Die Kurzversion lautet:"Sie müssen wahrscheinlich Daten in der Datenbank manuell ändern, um das Problem zu lösen".

Die längere Version:Ich hatte ein ähnliches Problem mit SQLite. Ich hatte die folgende Tabelle abgebildet:

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

Sehen Sie diesen zusammengesetzten Primärschlüssel? Ich habe es irgendwie geschafft, zwei Zeilen mit dem gleichen Paar Recipe_title/product_title einzufügen. Ich war überrascht, als ich herausfand, dass es auf der Seite von SQLite für diese Tabelle keine einzige Einschränkung gab (kein Primärschlüssel, kein Fremdschlüssel - es war nur eine einfache Vanilla-Tabelle), aber nun ja - so geht sqlalchemy, nicht meine Geschäft.

Als ich dann versuchte, ein persistentes Objekt mit diesen beiden Zeilen zu löschen, sah sqlalchemy, dass seine Einschränkungen verletzt wurden, und es warf den 'StaleDataError'. Schließlich musste ich nur noch eine doppelte Zeile manuell aus der SQLite-Tabelle entfernen.