Пессимистичная защита использует SELECT ... FOR UPDATE через with_for_update() внутри транзакции. Оптимистичная — условное обновление по версии, в ORM это можно настроить через version_id_col.
Как в SQLAlchemy реализовать пессимистичные и оптимистичные блокировки на уровне моделей?
Пессимистичная защита использует 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.