Предполагам, че мога да дам подсказка по този проблем. Кратката версия е:„Вероятно ще трябва да модифицирате данните в базата данни ръчно, за да разрешите проблема“.
По-дългата версия:имах подобен проблем със SQLite. Имах картографирана следната таблица:
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')))
виждате този съставен първичен ключ? Някак си успях да вмъкна два реда с една и съща двойка recipe_title/product_title. Бях изненадан да открия, че няма нито едно ограничение от страната на SQLite за тази таблица (без първичен ключ, без fereign ключ - това беше просто обикновена ванилова таблица), но добре - така върви sqlalchemy, не моята бизнес.
След това, когато се опитах да изтрия persited обект, включващ тези два реда, sqlalchemy видя, че неговите ограничения са нарушени и хвърли „StaleDataError“. Накрая просто трябваше да премахна ръчно един дублиращ се ред от таблицата на SQLite.