Непоследовательная ошибка sqlalchemy.exc.IntegrityError

#python #sql #postgresql #sqlalchemy #psycopg2

#python #sql #postgresql #sqlalchemy #psycopg2

Вопрос:

 class Parent():  

    id = Column(Integer ,primary_key = true)  
    children = relationship('Child', back_populates='parent', passive_deletes =True) 
    dependents = relationship('Dependent', back_populates='parent', passive_deletes =True)


class Child():  

   id = Column(Integer , primary_key = true)
   parent = relationship('Parent', back_populates='children')
   parent_id = Column(Integer, ForeignKey('parent.id', ondelete='CASCADE') 
   anothers = relationship('Another', back_populates='child') 


class Dependent():  

   id = Column(Integer , primary_key = true)
   parent = relationship('Parent', back_populates='children')
   parent_id = Column(Integer, ForeignKey('parent.id', ondelete='CASCADE') 
   another = relationship('Another', back_populates='dependent', uselist=False, passive_deletes = True) 


class Another():
   id = Column(Integer , primary_key = true)
  dependent = relationship('Dependent', back_populates='anothers')
  dependent_id = Column(Integer, ForeignKey('dependent.id', ondelete='CASCADE') 
  child = relationship('Child', back_populates='another')
  child_id = Column(Integer, ForeignKey('child.id')) 
  

Когда я удаляю дочерний объект, дочернее поле другого становится равным нулю. Так и должно быть. Другой должен быть удален, если удален только объект зависимого класса. Я должен предположить, что если я удалю родительский объект, все, что находится под ним, должно быть удалено. Как зависимые объекты, так и дочерние объекты, а также другие объекты (поскольку он имеет каскадную связь ondelete с зависимым, а зависимый имеет каскад ondelete с родительским)

Когда я удаляю родительский объект, ошибка выдает это сообщение:

ошибка sqlalchemy.exc.IntegrityError: обновление или удаление в таблице «дочерней» нарушает ограничение внешнего ключа «another_child_id_fkey» в таблице «другая» ДЕТАЛЬ: ключ (id) = (4) по-прежнему ссылается из таблицы «другая».

когда я удаляю дочерний объект, никаких проблем для другого класса. почему я получаю эту ошибку?