Операционная ошибка: база данных заблокирована

Итак, я знаю, что эта проблема не нова в колбе, и люди уже спрашивали ее раньше. Однако я все еще сталкиваюсь с проблемой при выполнении команд моей базы данных в bash, поскольку я новичок в python. Это то, что я сделал

import sqlite3
conn = sqlite.connect('/home/pjbardolia/mysite/tweet_count.db')
c = conn.cursor()

c.execute("create table count_twitter (count_id integer primary key autoincrement ,count_present integer not null,last_tweet not null)")

c.execute(insert into count_twitter values('',10,10))

однако после выполнения инструкции insert я получаю операционную ошибку: база данных заблокирована. Может ли кто-нибудь рассказать простыми словами, что означает эта ошибка? и как его решить. Спасибо заранее

Ответ 1

Вот что означает эта ошибка:

SQLite предназначен для облегченной базы данных и поэтому не может поддерживать высокий уровень параллелизма. OperationalError: база данных заблокирована. Ошибки указывают на то, что ваше приложение испытывает больше параллелизма, чем sqlite может обработать в конфигурации по умолчанию. Эта ошибка означает, что один поток или процесс имеет монопольную блокировку соединения с базой данных, а другой поток истек тайм-аут в ожидании снятия блокировки.

Оболочка Python SQLite имеет значение тайм-аута по умолчанию, которое определяет, как долго второй поток может ожидать блокировки до истечения времени ожидания, и вызывает ошибку OperationalError: database is locked is.

Если вы получаете эту ошибку, вы можете решить ее:

Переключение на другую базу данных. В определенный момент SQLite становится слишком "легким" для реальных приложений, и такого рода ошибки параллелизма указывают, что вы достигли этой точки.

Переписать свой код, чтобы уменьшить параллелизм и обеспечить кратковременность транзакций в базе данных.

Увеличьте значение времени ожидания по умолчанию, установив параметр базы данных времени ожидания.

Возможно, у вас есть другое соединение в вашем коде, которое не закрыто или не зафиксировано, и это приводит к этой ошибке. Обычно пытается выполнить второе execute когда оно уже заблокировано другим. Если вы действительно хотите иметь свои параллельные транзакции, вам нужна СУБД.

Ответ 2

убедитесь, что вы передаете другие соединения, используя con.commit()

Ответ 3

У меня была та же проблема, и я обнаружил, что уничтожение всех процессов Python решило эту проблему.