PostgreSQL
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> PostgreSQL

Xóa khỏi nhiều SQL-Alchemy và Postgresql

Tôi giả sử rằng thông báo lỗi là đúng:thực sự trong cơ sở dữ liệu của bạn, bạn có 2 hàng liên kết LocationHeading các trường hợp. Trong trường hợp này, bạn nên tìm hiểu nơi và tại sao điều này xảy ra ngay từ đầu và ngăn điều này xảy ra lần nữa

  1. Trước tiên, để xác nhận giả định này, bạn có thể chạy truy vấn sau đối với cơ sở dữ liệu của mình:

    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
    )
    
  2. Giả sử, giả định được xác nhận, sửa chữa nó bằng cách xóa thủ công tất cả các bản sao trong cơ sở dữ liệu của bạn (chỉ để lại một bản cho mỗi cái).

  3. Sau đó, thêm UniqueConstraint tới headings_locations của bạn bảng:

    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'),
    )
    

Lưu ý rằng bạn cần phải thêm nó vào cơ sở dữ liệu, chỉ thêm nó vào sqlalchemy là chưa đủ mô hình.

Giờ đây, mã nơi các bản sao được chèn do nhầm lẫn sẽ không thành công với ngoại lệ vi phạm ràng buộc duy nhất và bạn có thể khắc phục gốc rễ của vấn đề.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. postgres:nâng cấp người dùng thành superuser?

  2. Postgres có được thiết kế để ghi vào kho dữ liệu được chia sẻ không?

  3. LỖI:tìm thấy nhiều chuỗi được sở hữu trong Postgres

  4. Django cùng nhau duy nhất mối quan hệ với lĩnh vực và nhiều người về bản thân

  5. Nhân bản cơ sở dữ liệu / Postgres Streaming Replication