Выбор ответа Middle SQLAlchemy 2.0 обновлено
flush против commit
Вопрос
Чем session.flush() отличается от session.commit()?
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: flush шлёт SQL внутри транзакции, commit её фиксирует. После flush изменения видны в этой транзакции, например появляется автоинкрементный id, но другие соединения их не видят, и откат всё отменит. commit делает flush и завершает транзакцию.
Варианты ответа
flushочищает сессию от объектов, аcommitсохраняет ихcommitне отправляет изменения, только закрывает соединение- Это синонимы,
flushоставлен для совместимости с 1.x flushшлёт SQL внутри транзакции,commitеё фиксируетправильный ответ
Разбор
После flush изменения видны в этой транзакции, например появляется автоинкрементный id, но другие соединения их не видят, и откат всё отменит. commit делает flush и завершает транзакцию. Очищает сессию expunge_all или закрытие, а не flush.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.