Как заблокировать базу данных sqlite3 в Python? - PullRequest
4 голосов
/ 12 января 2012

Есть ли способ явно получить блокировку для базы данных sqlite3 в Python?

Ответы [ 3 ]

4 голосов
/ 12 января 2012

Способ явной блокировки базы данных заключается в запуске транзакции, как описано в документации :

Когда к базе данных получают доступ несколько соединений, и один из процессов изменяет базу данных, база данных SQLite блокируется до тех пор, пока эта транзакция не будет зафиксирована.

Одним из способов инициирования транзакции является использование соединения в качестве диспетчера контекста :

import sqlite3
con = sqlite3.connect(...)
...
with con:
    # Database is locked here

Также обратите внимание, что некоторые транзакции по умолчанию происходят :

По умолчанию модуль sqlite3 неявно открывает транзакции перед оператором языка изменения данных (DML) (т. Е. INSERT / UPDATE / DELETE / REPLACE) и неявно фиксирует транзакции перед оператором без DML, без запроса (т. Е. С чем-либо другим). чем ВЫБРАТЬ или вышеупомянутый).

3 голосов
/ 12 января 2012

Из часто задаваемых вопросов по sqlite, " Может ли несколько приложений или несколько экземпляров одного и того же приложения одновременно обращаться к одному файлу базы данных? Несколько процессов могут одновременно открывать одну и ту же базу данных. Несколько процессов могут выполнять SELECT одновременно. Но только один процесс может вносить изменения в базу данных в любой момент время, однако.

Независимо от того, используете ли вы конструкцию with connection, многие процессы могут читать только из одного, и запись в базу данных может быть осуществлена ​​в любое время.

1 голос
/ 03 февраля 2017

Мы можем использовать многопроцессорные команды для блокировки процесса записи и чтения в БД. Я использую следующие команды, и он работает нормально. от многопроцессорной блокировки импорта l.Lock () l.acquire () Чтение / запись БД l.release ()

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