Ich würde davon ausgehen, dass die Fehlermeldung korrekt ist:Tatsächlich haben Sie in Ihrer Datenbank 2 Zeilen, die Location
verknüpfen und Heading
Instanzen. In diesem Fall sollten Sie herausfinden, wo und warum dies überhaupt geschehen ist, und verhindern, dass dies erneut geschieht
-
Um diese Annahme zu bestätigen, könnten Sie zunächst die folgende Abfrage für Ihre Datenbank ausführen:
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 )
-
Angenommen, die Annahme wird bestätigt, fix indem Sie manuell alle Duplikate in Ihrer Datenbank löschen (wobei nur eines für jedes übrig bleibt).
-
Fügen Sie danach eine UniqueConstraint hinzu zu Ihren
headings_locations
Tabelle: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'), )
Beachten Sie, dass Sie es der Datenbank hinzufügen müssen, es reicht nicht aus, es der sqlalchemy
hinzuzufügen Modell.
Jetzt schlägt der Code, in den die Duplikate versehentlich eingefügt wurden, mit der Ausnahme der eindeutigen Einschränkungsverletzung fehl, und Sie können die Wurzel des Problems beheben.