Как в SQLAlchemy управлять состояниями объектов: Transient, Pending, Persistent, Detached?

Transient — новый объект вне Session; Pending — добавлен и ждёт INSERT; Persistent — связан с Session и строкой БД; Detached — имеет идентичность, но больше не связан с Session.

Короткий ответ

Что ответить на собеседовании

Transient — новый объект вне Session; Pending — добавлен и ждёт INSERT; Persistent — связан с Session и строкой БД; Detached — имеет идентичность, но больше не связан с Session.

Подробный разбор

Ответ с пояснениями

Transient — новый объект вне Session; Pending — добавлен и ждёт INSERT; Persistent — связан с Session и строкой БД; Detached — имеет идентичность, но больше не связан с Session.

session.add() переводит новый объект в pending, а успешный flush — в persistent. expunge() или закрытие Session могут сделать объект detached. merge() переносит состояние в управляемый экземпляр и возвращает его: исходный detached-объект не становится автоматически этим экземпляром. После commit атрибуты могут быть expired — это не то же самое, что detached. У detached-объекта нельзя рассчитывать на lazy load без подключения к Session.

Источник: docs.sqlalchemy.org.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее