sql >> Databáze >  >> RDS >> Mysql

SQLAlchemy StaleDataError při mazání položek vložených prostřednictvím ORM sqlalchemy.orm.exc.StaleDataError

Myslím, že mohu napovědět na tento problém. Krátká verze zní:„Abyste problém vyřešili, budete pravděpodobně muset upravit data v databázi ručně“.

Delší verze:Měl jsem podobný problém s SQLite. Měl jsem namapovanou následující tabulku:

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

vidíte ten složený primární klíč? Nějak se mi podařilo vložit dva řádky se stejným párem recept_název/název_produktu. Překvapilo mě, když jsem zjistil, že na straně SQLite pro tuto tabulku neexistuje jediné omezení (žádný primární klíč, žádný cizí klíč - byla to jen obyčejná vanilková tabulka), ale dobře - takhle jde sqlalchemy, ne moje podnikání.

Když jsem se pak pokusil odstranit persited objekt zahrnující tyto dva řádky, sqlalchemy zjistila, že jeho omezení byla porušena, a vyhodila 'StaleDataError'. Nakonec jsem musel ručně odstranit jeden duplikující řádek z tabulky SQLite.



  1. Během provádění příkazu došlo k závažné chybě

  2. Nahrání a uložení vícenásobných obrazových souborů PHP do složky a databáze

  3. Zastavit SQL v aktualizaci prázdných nebo prázdných polí z mého aktualizačního formuláře

  4. Implementujte upozornění na události MySQL zpět do aplikace Delphi