Identity Map хранит соответствие ORM-идентичности и Python-объекта внутри Session. При загрузке той же строки SQLAlchemy использует уже присутствующий экземпляр, а не создаёт независимую копию.
Что такое Identity Map в паттерне Data Mapper в SQLAlchemy? Как этот механизм гарантирует, что два разных запроса к одной и той же строке базы данных в рамках одной сессии вернут ссылку на один и тот же объект в памяти Python?
Identity Map хранит соответствие ORM-идентичности и Python-объекта внутри Session. При загрузке той же строки SQLAlchemy использует уже присутствующий экземпляр, а не создаёт независимую копию.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Identity Map хранит соответствие ORM-идентичности и Python-объекта внутри Session. При загрузке той же строки SQLAlchemy использует уже присутствующий экземпляр, а не создаёт независимую копию.
Ключ включает не только значение primary key, но и mapper, а в некоторых конфигурациях identity token. Обычный запрос может всё равно выполнить SQL: identity map не является кешем произвольных результатов запросов. Гарантия относится к объектам, связанным с этой Session; после expunge, закрытия или утраты weak reference жизненный цикл меняется. Другая Session обычно содержит другой экземпляр той же строки. Обновление атрибутов из БД регулируется expiration/refresh, поэтому идентичность объекта не равна вечной актуальности его данных.
Источник: docs.sqlalchemy.org.