エラーメッセージは正しいと思います。実際、データベースにはLocation
をリンクする2つの行があります。 および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 )
-
仮定が確認されたと仮定して、修正 データベース内のすべての重複を手動で削除します(それぞれに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
に追加するだけでは不十分です。 モデル。
これで、重複が誤って挿入されたコードは、一意性制約違反の例外で失敗し、問題の根本を修正できます。