Ik neem aan dat de foutmelding correct is:inderdaad in je database heb je 2 rijen die linken naar Location
en Heading
gevallen. In dit geval moet u uitzoeken waar en waarom dit in de eerste plaats is gebeurd, en voorkomen dat dit opnieuw gebeurt
-
Om deze veronderstelling te bevestigen, kunt u eerst de volgende query uitvoeren op uw database:
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 )
-
Ervan uitgaande dat de aanname wordt bevestigd, repareren door handmatig alle duplicaten in uw database te verwijderen (er blijft er slechts één voor elk).
-
Voeg daarna een UniqueConstraint toe naar uw
headings_locations
tafel: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'), )
Merk op dat u het aan de database moet toevoegen, het is niet voldoende om het toe te voegen aan de sqlalchemy
model.
Nu zal de code waar de duplicaten per ongeluk zijn ingevoegd, mislukken met de unieke uitzondering voor schending van beperkingen, en kunt u de oorzaak van het probleem oplossen.