Как в SQLAlchemy реализовать пессимистичные и оптимистичные блокировки на уровне моделей?

Пессимистичная защита использует SELECT ... FOR UPDATE через with_for_update() внутри транзакции. Оптимистичная — условное обновление по версии, в ORM это можно настроить через version_id_col.

Короткий ответ

Что ответить на собеседовании

Пессимистичная защита использует SELECT ... FOR UPDATE через with_for_update() внутри транзакции. Оптимистичная — условное обновление по версии, в ORM это можно настроить через version_id_col.

Подробный разбор

Ответ с пояснениями

Пессимистичная защита использует SELECT ... FOR UPDATE через with_for_update() внутри транзакции. Оптимистичная — условное обновление по версии, в ORM это можно настроить через version_id_col.

При пессимистичном подходе другие писатели ждут освобождения нужных строк, поэтому транзакция должна быть короткой. При оптимистичном конфликт обнаруживается при записи устаревшей версии; нужно повторить сценарий или показать конфликт пользователю. Счётчик версий ORM действует при соответствующем flush объектов и не заменяет защиту произвольного массового UPDATE. Отдельно учитывайте поддержку блокировок конкретной СУБД.

Источник: docs.sqlalchemy.org.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее