Identity Map хранит соответствие идентичности строки и Python-объекта внутри Session. При повторной загрузке той же ORM-сущности SQLAlchemy переиспользует уже известный экземпляр.
Что такое Identity Map в паттерне Data Mapper (SQLAlchemy)? Как этот механизм гарантирует, что два разных запроса к одной и той же строке базы данных в рамках одной сессии вернут ссылку на один и тот же объект в памяти Python?
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.