PostgreSQL
 sql >> Teknologi Basis Data >  >> RDS >> PostgreSQL

Menghapus dari banyak-ke-banyak SQL-Alchemy dan Postgresql

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

  1. 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
    )
    
  2. Dengan asumsi, asumsi dikonfirmasi, perbaiki dengan menghapus secara manual semua duplikat di database Anda (hanya menyisakan satu untuk masing-masing).

  3. 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.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SQL, Postgres OIDs, Apa itu dan mengapa berguna?

  2. Instal PHP dengan Postgresql di MAC menggunakan homebrew

  3. Permintaan kueri transpos tab silang

  4. Heroku - ActiveRecord::StatementInvalid (PG::Error:ERROR:kolom yang diminta tidak ada

  5. Mengkompilasi ekstensi pg_repack pada format biner instalasi PostgreSQL