Поддержка SQLAlchemy для NOWAIT на MySQL - PullRequest
0 голосов
/ 30 апреля 2020

MySQL имеет , недавно начал поддерживать NOWAIT для блокировки обновления на уровне записи. Это очень важно для обработки конфликта обновления, однако у меня возникают трудности при попытке реализовать его в моем веб-приложении (SQLQAlchemy / Flask с MySQL базой данных).

SQLAlchemy пока не поддерживает это для MySQL диалект (я использую pymysql).

Мои спецификации c SQL ORM-выражение читает:

line = cs.query(BookLine).filter_by(my_id).with_for_update(nowait=True, skip_locked=True)

и генерирует SQL:

SELECT ... FROM bookline WHERE bookline.id = %(id_1)s FOR UPDATE

С этой указанной c записью, заблокированной другим сеансом, это SQL истечет время ожидания и завершится неудачей с неудовлетворительным взаимодействием с пользователем. В командной строке SQL с добавленным NOWAIT завершается неудачно (правильно).

Как лучше всего с этим справиться? Или есть поддержка, исходящая от SQLAlchemy (даже на основе патчей)?

Опции, которые я вижу:

  1. Обработка необработанных SQL с добавлением, что не является очень расширяемый для некоторых других конфликтных ситуаций, которые у меня есть.

  2. Создание альтернативного диалекта с поддержкой этой функции (хотя у меня нет такого опыта).

  3. Исправьте существующий код диалекта, если это решение.
...