Jeg vil antage, at fejlmeddelelsen er korrekt:i din database har du faktisk 2 rækker, der linker Location
og Heading
tilfælde. I dette tilfælde bør du finde ud af, hvor og hvorfor dette skete i første omgang, og forhindre, at det sker igen
-
For det første, for at bekræfte denne antagelse, kan du køre følgende forespørgsel mod din 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 )
-
Forudsat, at antagelsen er bekræftet, fix det ved manuelt at slette alle dubletter i din database (efterlader kun én til hver).
-
Derefter skal du tilføje en UniqueConstraint til dine
headings_locations
tabel: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'), )
Bemærk, at du skal tilføje det til databasen, det er ikke nok at tilføje det til sqlalchemy
model.
Nu vil koden, hvor dubletterne er indsat ved en fejltagelse, mislykkes med den unikke undtagelse for overtrædelse af begrænsninger, og du kan løse roden til problemet.