Как устроена ленивая загрузка (Lazy Loading) в ORM и какие риски она несёт при передаче объекта между потоками?

Lazy loading откладывает SQL до обращения к связанному или отложенному атрибуту. Передача ORM-объекта в другой поток может неожиданно использовать чужую Session и соединение.

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

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

Lazy loading откладывает SQL до обращения к связанному или отложенному атрибуту. Передача ORM-объекта в другой поток может неожиданно использовать чужую Session и соединение.

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

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

Lazy loading откладывает SQL до обращения к связанному или отложенному атрибуту. Передача ORM-объекта в другой поток может неожиданно использовать чужую Session и соединение.

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

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

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

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

Подробнее