Transient — новый объект вне Session; Pending — добавлен и ждёт INSERT; Persistent — связан с Session и строкой БД; Detached — имеет идентичность, но больше не связан с Session.
Как в SQLAlchemy управлять состояниями объектов: Transient, Pending, Persistent, Detached?
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.