Mysql
 sql >> Baza danych >  >> RDS >> Mysql

SQLAlchemy DELETE Błąd spowodowany zarówno leniwym ładowaniem, jak i dynamiczną wersją tej samej relacji

zarówno relacje Group.users, jak i Group.users_dynamic próbują pogodzić fakt, że grupa jest usuwana wraz z możliwością zarządzania User() przedmioty, do których się odnoszą; jedna relacja powiodła się, a druga nie, ponieważ wiersze w tabeli asocjacji zostały już usunięte. Najprostszym rozwiązaniem jest oznaczenie wszystkich identycznych relacji z wyjątkiem jednej jako tylko do wyświetlania:

class Group(Base):
    __tablename__ = 'groups'
    id = Column(Integer, primary_key=True)

    users = relationship('User', secondary=users_groups, lazy='select', backref='groups')
    users_dynamic = relationship('User', viewonly=True, secondary=users_groups, lazy='dynamic')

jeśli nadal chcesz, aby obie relacje obsługiwały pewien stopień mutacji, musisz zrobić to ostrożnie, ponieważ SQLAlchemy nie wie, jak koordynować zmiany w dwóch relacjach w tym samym czasie, więc konflikty takie jak ten mogą trwać zdarzają się (jak podwójne wstawki itp.), jeśli dokonasz równoważnych mutacji w obu relacjach. Aby samodzielnie zająć się problemem „usuwania”, możesz również spróbować ustawić Group.users_dynamic na pasyw_deletes=True:

class Group(Base):
    __tablename__ = 'groups'
    id = Column(Integer, primary_key=True)

    users = relationship('User', secondary=users_groups, lazy='select', backref='groups')
    users_dynamic = relationship('User', passive_deletes=True, secondary=users_groups, lazy='dynamic')


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Dlaczego funkcja LEFT JOIN w MySQL zwraca rekordy NULL, gdy zawiera klauzulę WHERE?

  2. MySQL utf8mb4, Błędy podczas zapisywania emotikonów

  3. Składnia symboli zastępczych MySQLdb w Pythonie

  4. Java/Mysql..SQLException:Tabela musi zawierać co najmniej 1 kolumnę SQLState:42000 VendorError:1113

  5. Dwa klucze podstawowe określone w bazie danych MySQL