Supongo que el mensaje de error es correcto:de hecho, en su base de datos tiene 2 filas que vinculan Location
y Heading
instancias. En este caso, debe averiguar dónde y por qué sucedió esto en primer lugar y evitar que vuelva a suceder
-
Primero, para confirmar esta suposición, puede ejecutar la siguiente consulta en su base de datos:
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 )
-
Suponiendo que se confirme la suposición, corregir eliminando manualmente todos los duplicados en su base de datos (dejando solo uno para cada uno).
-
Después de eso, agregue un UniqueConstraint a tus
headings_locations
tabla: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'), )
Tenga en cuenta que debe agregarlo a la base de datos, no es suficiente agregarlo a sqlalchemy
modelo.
Ahora, el código donde se insertan los duplicados por error fallará con la excepción de violación de restricción única, y puede solucionar la raíz del problema.