Что такое Identity Map в паттерне Data Mapper (SQLAlchemy)? Как этот механизм гарантирует, что два разных запроса к одной и той же строке базы данных в рамках одной сессии вернут ссылку на один и тот же объект в памяти Python?

Identity Map хранит соответствие идентичности строки и Python-объекта внутри Session. При повторной загрузке той же ORM-сущности SQLAlchemy переиспользует уже известный экземпляр.

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

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

Identity Map хранит соответствие идентичности строки и Python-объекта внутри Session. При повторной загрузке той же ORM-сущности SQLAlchemy переиспользует уже известный экземпляр.

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

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

Identity Map хранит соответствие идентичности строки и Python-объекта внутри Session. При повторной загрузке той же ORM-сущности SQLAlchemy переиспользует уже известный экземпляр.

Ключ включает mapper, первичный ключ и при необходимости identity token. Это не кеш произвольных SQL-результатов: SELECT может выполняться повторно, но материализация строки найдёт существующий объект.

Session.get способен обойти запрос для уже загруженного неистёкшего объекта. После expunge, закрытия сессии или в другой сессии гарантия общей ссылки не действует. Identity Map также не означает автоматическое обновление всех атрибутов при каждом запросе: для свежих данных учитывайте expire/refresh и границы транзакции.

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

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

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

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

Подробнее