#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) по-прежнему ссылается из таблицы «другая».
когда я удаляю дочерний объект, никаких проблем для другого класса. почему я получаю эту ошибку?