питон, ошибка sqlite? дб заблокирован? но это не так? - PullRequest
3 голосов
/ 10 февраля 2009

Я получаю сообщение об ошибке «таблица базы данных заблокирована» в моей базе данных sqlite3. Мой сценарий однопоточный, никакое другое приложение не использует программу (у меня он был открыт один раз в "SQLite Database Browser.exe"). Я скопировал файл, удалил оригинал (успех) и переименовал копию, чтобы я знал, что ни один процесс еще не блокирует его, когда я запускаю свой сценарий, все в таблице B не может быть записано, и похоже, что таблица A в порядке. Что происходит?

-edit- Я исправил это, но не уверен, как. Я заметил, что код не работает правильно (я скопировал неправильное поле) и после исправления и очистки он волшебным образом снова начал работать.

-edit2-

Кто-то еще опубликовал, так что я мог бы также обновить. Я думаю, проблема была в том, что я пытался сделать оператор с помощью команды / курсора.

Ответы [ 4 ]

3 голосов
/ 29 июня 2011

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

from sqlite3 import dbapi2 as sqlite


def unlock_db(db_filename):
    """Replace db_filename with the name of the SQLite database."""
    connection = sqlite.connect(db_filename)
    connection.commit()
    connection.close()
2 голосов
/ 22 июня 2009

Удаление файлов -журналов звучит как плохой совет. См. это объяснение .

2 голосов
/ 10 февраля 2009

Возможно, ваше приложение преждевременно завершило работу после начала транзакции SQLite. Найдите в каталоге устаревшие -journal файлы и удалите их.

Возможно, стоит просмотреть документацию .

0 голосов
/ 14 июня 2011

Я также видел эту ошибку, когда файл db находится в смонтированной файловой системе NFS.

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