Выбор ответа Middle SQLAlchemy 2.0 обновлено

expire_on_commit

Вопрос

Что делает настройка expire_on_commit=True (по умолчанию)?

Попробуйте сами

Выберите вариант, и откроется разбор.

Показать ответ и разбор

Коротко

Правильный ответ: После коммита атрибуты устаревают и перечитываются при обращении. После коммита данные в базе могли измениться другими транзакциями, поэтому SQLAlchemy по умолчанию сбрасывает загруженные значения.

Варианты ответа

  1. После коммита атрибуты устаревают и перечитываются при обращенииправильный ответ
  2. Удаляет объекты из базы после коммита, если они временные
  3. Делает коммит автоматически через заданное время бездействия
  4. Отключает транзакции и переводит сессию в режим autocommit

Разбор

После коммита данные в базе могли измениться другими транзакциями, поэтому SQLAlchemy по умолчанию сбрасывает загруженные значения. Обращение к атрибуту вызовет новый запрос, а если сессия уже закрыта, получится DetachedInstanceError, в async ещё и MissingGreenlet. В веб-приложениях и async часто ставят expire_on_commit=False.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.

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