PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

Usuwanie z wielu do wielu SQL-Alchemy i Postgresql

Zakładam, że komunikat o błędzie jest poprawny:rzeczywiście w Twojej bazie danych masz 2 wiersze, które łączą Location i Heading instancje. W takim przypadku powinieneś najpierw dowiedzieć się, gdzie i dlaczego to się stało, i zapobiec powtórzeniu się tego zdarzenia

  1. Najpierw, aby potwierdzić to założenie, możesz uruchomić następujące zapytanie w swojej bazie danych:

    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. Zakładając, że założenie jest potwierdzone, popraw to poprzez ręczne usunięcie wszystkich duplikatów w Twojej bazie danych (pozostawiając tylko po jednym dla każdego).

  3. Następnie dodaj UniqueConstraint do Twoich headings_locations tabela:

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

Pamiętaj, że musisz dodać go do bazy danych, nie wystarczy dodać go do sqlalchemy model.

Teraz kod, w którym duplikaty są wstawiane przez pomyłkę, zakończy się niepowodzeniem z wyjątkiem naruszenia ograniczenia unikatowego i możesz naprawić źródło problemu.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. lista schematów z rozmiarami (względnymi i bezwzględnymi) w bazie danych PostgreSQL

  2. Książka „Wysoka wydajność PostgreSQL 9.0” jest już dostępna

  3. Jak replikować dane PostgreSQL do zdalnych witryn

  4. Zainstaluj PostgreSQL na Ubuntu 18.04

  5. Typ punktu w sqlalchemii?