Presumo che il messaggio di errore sia corretto:infatti nel tuo database hai 2 righe che collegano Location
e Heading
istanze. In questo caso dovresti scoprire dove e perché è successo in primo luogo e impedire che ciò accada di nuovo
-
Innanzitutto, per confermare questa ipotesi, puoi eseguire la seguente query sul tuo 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 )
-
Supponendo che l'ipotesi sia confermata, correggere eliminando manualmente tutti i duplicati nel database (lasciandone solo uno per ciascuno).
-
Successivamente, aggiungi un UniqueConstraint al tuo
headings_locations
tabella: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'), )
Nota che devi aggiungerlo al database, non è sufficiente aggiungerlo a sqlalchemy
modello.
Ora il codice in cui i duplicati vengono inseriti per errore fallirà con l'eccezione di violazione del vincolo univoco e puoi correggere la radice del problema.