2009-02-10 4 views
2

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

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

-edit2-

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

+0

вы можете уменьшить свой код до минимального неработающего примера и разместить его ? – nosklo

+0

Без кода невозможно сказать, о чем вы говорите. Кстати, если ваше приложение многопоточно или создает подпроцессы, включите этот факт. –

ответ

1

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

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

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

Возможно, вам стоит свернуть через documentation.

+1

Это очень плохой совет и может легко привести к повреждению базы данных. См. Http://www.sqlite.org/lockingv3.html#rollback. – escouten

0

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

Смежные вопросы