Peewee блокировка уровня строки - PullRequest
0 голосов
/ 11 октября 2018

В настоящее время я использую Peewee в качестве ORM в моем проекте.В моей текущей ситуации у меня есть несколько процессов, каждый из которых имеет соединение с базой данных.Все эти процессы должны обращаться к определенной таблице одновременно .Я ищу способ сделать их скоординированными без использования центрального контроллера .Для этого, когда процесс читается строкой, он должен быть заблокирован, и никакой другой процесс не сможет прочитать эту строку .Заблокированные процессы должны продолжаться с другими неблокированными строками.

Я искал вокруг и обнаружил, что MySql уже имеет механизм внутренней блокировки, описанный здесь , и, очевидно, он должен использоваться в индексированных столбцы должны вести себя как ожидалось ( отсюда ).Но я не смог найти ничего связанного в документах на пиви.Есть ли расширение, обеспечивающее эти функции?Или я должен написать необработанные SQL-запросы, содержащие FOR Update предложение?

1 Ответ

0 голосов
/ 12 октября 2018

Peewee поддерживает использование предложения FOR UPDATE, и я думаю, что это, вероятно, то, что вы хотите.Это не помешает другим клиентам читать, но предотвратит изменения, пока транзакция, удерживающая блокировку, открыта.

Пример:

with db.atomic():
    # lock note.
    note = Note.select().where(Note.id == 123).for_update().get()
    # As long as lock is held no other client can modify note.
...