Предполагам, че съобщението за грешка е правилно:наистина във вашата база данни имате 2 реда, които свързват Location
и Heading
инстанции. В този случай трябва да разберете къде и защо се е случило това на първо място и да предотвратите това да се случи отново
-
Първо, за да потвърдите това предположение, можете да изпълните следната заявка към вашата база данни:
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 )
-
Ако приемем, предположението е потвърдено, коригирайте чрез ръчно изтриване на всички дубликати във вашата база данни (оставяйки само по един за всеки).
-
След това добавете UniqueConstraint към вашите
headings_locations
таблица: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'), )
Имайте предвид, че трябва да го добавите към базата данни, не е достатъчно да го добавите към sqlalchemy
модел.
Сега кодът, в който дубликатите са вмъкнати по погрешка, ще се провали с изключение за нарушение на уникалното ограничение и можете да коригирате корена на проблема.