Выбор ответа Senior SQLAlchemy 2.0 обновлено
Блокировка строки в SQLAlchemy
Вопрос
Как в SQLAlchemy 2.0 заблокировать строку счёта до конца транзакции перед списанием?
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: select(Account).where(...).withforupdate(). withforupdate() добавляет SELECT ...
Варианты ответа
session.lock(Account, id)перед изменениемsession.query(Account).lock().get(id)session.get(Account, id, lock=True)в транзакцииselect(Account).where(...).with_for_update()правильный ответ
Разбор
with_for_update() добавляет SELECT ... FOR UPDATE, и параллельные транзакции, желающие изменить строку, ждут коммита. Параметры nowait=True и skip_locked=True меняют поведение ожидания. У session.get есть параметр with_for_update, но не lock, а методов session.lock и query.lock нет.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.