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