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.