Код Middle SQLAlchemy 2.0 обновлено

Смоделировать identity map сессии

Условие

Смоделируйте identity map. Операции: ["get", id] (вернуть объект из карты, иначе «сходить в базу», записать и вернуть), ["update", id, value] (изменить загруженный объект, без запроса; если не загружен, сначала загрузить), ["expire_all"] (как после коммита: следующее get снова идёт в базу). База это словарь db «id -> значение» (id передаются строками); отсутствующий id даёт None и в карту не пишется. Верните [результаты всех get, число запросов в базу]. Изменения в базу не записываются.

Примеры

simulate({"1":"a"}, [["get", "1"], ["get", "1"]]) // [["a", "a"], 1]
simulate({"1":"a"}, [["get", "1"], ["update", "1", "b"], ["get", "1"]]) // [["a", "b"], 1]
simulate({"1":"a"}, [["get", "1"], ["update", "1", "b"], ["expire_all"], ["get", "1"]]) // [["a", "a"], 2]

Как подойти

Подсказки: 2
  1. Словарь id -> объект и счётчик запросов.
  2. expire_all очищает карту.

Решите в тренажёре

Редактор с автотестами прямо в браузере. Можно решить спокойно, вслух или под таймером, как на собесе.

Термины по теме