Saya akan berasumsi bahwa pesan kesalahan itu benar:memang di database Anda, Anda memiliki 2 baris yang menautkan Location
dan Heading
contoh. Dalam hal ini Anda harus mencari tahu di mana dan mengapa ini terjadi sejak awal, dan mencegah hal ini terjadi lagi
-
Pertama, untuk mengonfirmasi asumsi ini, Anda dapat menjalankan kueri berikut terhadap database Anda:
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 )
-
Dengan asumsi, asumsi dikonfirmasi, perbaiki dengan menghapus secara manual semua duplikat di database Anda (hanya menyisakan satu untuk masing-masing).
-
Setelah itu, tambahkan UniqueConstraint ke
headings_locations
Anda tabel: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'), )
Perhatikan bahwa Anda perlu menambahkannya ke database, itu tidak cukup untuk menambahkannya ke sqlalchemy
model.
Sekarang kode tempat duplikat dimasukkan secara tidak sengaja akan gagal dengan pengecualian pelanggaran batasan unik, dan Anda dapat memperbaiki akar masalahnya.