Tôi đoán tôi có thể đưa ra một gợi ý về vấn đề này. Phiên bản ngắn gọn là:"Bạn có thể sẽ phải sửa đổi dữ liệu trong Cơ sở dữ liệu theo cách thủ công để giải quyết vấn đề".
Phiên bản dài hơn:Tôi gặp sự cố tương tự với SQLite. Tôi đã ánh xạ bảng sau:
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')))
xem khóa chính tổng hợp đó không? Bằng cách nào đó, tôi đã chèn được hai hàng với cùng một cặp công thức_title / product_title. Tôi đã rất ngạc nhiên khi phát hiện ra rằng không có một ràng buộc nào ở phía SQLite đối với bảng này (không có khóa chính, không có khóa đăng ký lại - nó chỉ là một bảng đơn giản), nhưng tốt - đó là cách sqlalchemy đi, không phải của tôi kinh doanh.
Sau đó, khi tôi cố gắng xóa một đối tượng cố định liên quan đến hai hàng đó, sqlalchemy thấy rằng các ràng buộc của nó đã bị vi phạm và nó đã ném ra 'StaleDataError'. Cuối cùng, tôi chỉ phải xóa một hàng trùng lặp theo cách thủ công khỏi bảng SQLite.