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_locationstabel: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.