Как применить sqlite для выбора поведения транзакции обновления в sqlalchemy - PullRequest
13 голосов
/ 27 апреля 2011

Вчера я работал с некоторыми вещами sqlalchemy, которые нуждались в концепции "выбрать ... для обновления", чтобы избежать состояния гонки. Добавление .with_lockmode('update') к запросу работает на InnoDB и Postgres, но для sqlite мне в итоге приходится красться в

if session.bind.name == 'sqlite':
    session.execute('begin immediate transaction')

перед выполнением выбора.

Пока что это работает, но похоже на обман. Есть ли лучший способ сделать это?

1 Ответ

7 голосов
/ 20 октября 2011

ВЫБРАТЬ ... ДЛЯ ОБНОВЛЕНИЯ ... не поддерживается.Это понятно, учитывая, что механизм SQLite в том, что блокировка строк избыточна, так как вся база данных блокируется при обновлении любого ее бита.Однако было бы хорошо, если бы будущая версия SQLite поддерживала его по причинам взаимозаменяемости SQL, если ничего больше.Единственная необходимая функциональность заключается в том, чтобы гарантировать, что блокировка «ЗАБРОНИРОВАНА» помещена в базу данных, если ее там еще нет.на всю базу данных.здесь также должен применяться нормальный механизм синхронизации, блокировка файлов, синхронизация процессов и т. д.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...