Chyba mogę dać podpowiedź na ten problem. Krótka wersja to:„Prawdopodobnie będziesz musiał ręcznie zmodyfikować dane w bazie danych, aby rozwiązać problem”.
Dłuższa wersja:miałem podobny problem z SQLite. Zmapowałem następującą tabelę:
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')))
widzisz ten złożony klucz podstawowy? Jakoś udało mi się wstawić dwa wiersze z tą samą parą przepis_tytuł/produkt_tytuł. Byłem zaskoczony, gdy dowiedziałem się, że po stronie SQLite nie było ani jednego ograniczenia po stronie SQLite dla tej tabeli (bez klucza podstawowego, bez klucza obcego - to była tylko zwykła waniliowa tabela), ale cóż - tak działa sqlalchemia, a nie moja biznes.
Następnie, kiedy próbowałem usunąć obiekt zawierający te dwa wiersze, sqlalchemy zauważył, że jego ograniczenia zostały naruszone i wyrzucił błąd „StaleDataError”. W końcu musiałem tylko ręcznie usunąć jeden zduplikowany wiersz z tabeli SQLite.