Jag skulle anta att felmeddelandet är korrekt:i din databas har du verkligen 2 rader som länkar Location
och Heading
instanser. I det här fallet bör du ta reda på var och varför detta hände från början, och förhindra att detta händer igen
-
Först, för att bekräfta detta antagande, kan du köra följande fråga mot din databas:
q = session.query( headings_locations.c.location_id, headings_locations.c.heading_id, sa.func.count().label("# connections"), ).group_by( headings_locations.c.location_id, headings_locations.c.heading_id, ).having( sa.func.count() > 1 )
-
Förutsatt att antagandet är bekräftat, fixa det genom att manuellt ta bort alla dubbletter i din databas (lämna bara en för varje).
-
Efter det lägger du till en UniqueConstraint till dina
headings_locations
tabell:headings_locations = db.Table('headings_locations', db.Column('id', db.Integer, primary_key=True), db.Column('location_id', db.Integer(), db.ForeignKey('location.id')), db.Column('headings_id', db.Integer(), db.ForeignKey('headings.id')), db.UniqueConstraint('location_id', 'headings_id', name='UC_location_id_headings_id'), )
Observera att du måste lägga till den i databasen, det räcker inte att lägga till den i sqlalchemy
modell.
Nu kommer koden där dubbletterna infogas av misstag att misslyckas med det unika undantaget för överträdelse av begränsningar, och du kan åtgärda roten till problemet.