Lazy loading откладывает SQL до обращения к связанному или отложенному атрибуту. Передача ORM-объекта в другой поток может неожиданно использовать чужую Session и соединение.
Как устроена ленивая загрузка (Lazy Loading) в ORM и какие риски она несёт при передаче объекта между потоками?
Lazy loading откладывает SQL до обращения к связанному или отложенному атрибуту. Передача ORM-объекта в другой поток может неожиданно использовать чужую Session и соединение.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Lazy loading откладывает SQL до обращения к связанному или отложенному атрибуту. Передача ORM-объекта в другой поток может неожиданно использовать чужую Session и соединение.
Если сессия уже закрыта, загрузка может завершиться ошибкой; если ещё открыта, возникает риск конкурентного доступа к не предназначенному для этого состоянию. Кроме того, скрытые запросы создают N+1 и выполняются вне ожидаемого контекста транзакции. Обычно в другой поток передают ID и открывают собственную сессию либо заранее материализуют DTO с нужными полями. Сам факт, что Python-объект доступен потоку, не делает безопасным связанное с ним ORM-окружение.