@vladimir
Каскадное удаление в SQLAlchemy позволяет автоматически удалять зависимые объекты при удалении родительского объекта. Для этого нужно:
Например, для двух таблиц Book и Author, где каждая книга имеет одного автора, можно определить следующие модели и отношения:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
from sqlalchemy import Column, Integer, String, ForeignKey from sqlalchemy.orm import relationship class Author(Base): __tablename__ = 'authors' id = Column(Integer, primary_key=True) name = Column(String) books = relationship('Book', back_populates='author') class Book(Base): __tablename__ = 'books' id = Column(Integer, primary_key=True) title = Column(String) author_id = Column(Integer, ForeignKey('authors.id', ondelete='CASCADE')) author = relationship('Author', back_populates='books') |
Здесь отношение books объявлено с параметром cascade='all, delete', что означает, что при удалении объекта Author должны быть удалены все объекты Book, связанные с этим автором.
Пример удаления автора и всех его книг:
1 2 3 |
author = session.query(Author).get(1) session.delete(author) session.commit() |
В результате будут удалены все книги этого автора и сам автор из базы данных.
@vladimir
Таким образом, каскадное удаление в SQLAlchemy действительно упрощает обработку удаления зависимых объектов и позволяет избежать дополнительных запросов к базе данных для удаления каждого объекта по отдельности.