Erro operacional: a base de dados está bloqueada

Fiz algumas operações repetitivas na minha aplicação (testá-la), e de repente estou a ter um erro estranho:
OperationalError: database is locked
Reiniciei o servidor, mas o erro persiste. O que pode ser tudo isto?

Author: Pokechu22, 2010-07-04

5 answers

De django doc:

O SQLite deve ser um peso leve. banco de dados, e assim não pode suportar um alto nível de concorrência. Erro operacional: a base de dados está bloqueada os erros indicam que a sua aplicação está experimentando mais concorrência do que o sqlite pode lidar por omissão configuracao. Este erro significa que um tópico ou processo tem um exclusivo bloquear a ligação à base de dados e outro tópico cronometrado à espera a fechadura será libertada.

O invólucro SQLite do Python tem um valor por omissão valor-limite que determina quanto tempo o segundo tópico é permitido esperar na fechadura, antes de sair e aumenta a base de dados de erro Operacional: é um erro bloqueado.

Se estás a ter este erro, podes resolva-o por:

A mudar para outra infra-estrutura de base de dados. Em um certo ponto SQLite torna-se demasiado "lite" para aplicações no mundo real, e este tipo de erros de concorrência indica que chegou a esse ponto. ponto. Reescrever o seu código para reduzir concorrência e garantir que a base de dados as transacções são de curta duração.

Aumenta o valor-limite por omissão em configurar a opção Tempo-limite da base de dados optionoption

Http://docs.djangoproject.com/en/dev/ref/databases/#database-is-locked-errorsoption

 49
Author: patrick, 2010-07-03 21:33:56
A razão prática para isso é muitas vezes que as conchas python ou django abriram um pedido para o DB e ele não foi fechado corretamente; matando seu acesso terminal muitas vezes liberta-o. Tive um erro ao executar os testes da linha de comando hoje.

Editar: eu recebo upvotes periódicos sobre isto. Se quiser cancelar o acesso sem reiniciar o terminal, então a partir da linha de comando pode fazer:

from django import db
db.connections.close_all()
 17
Author: Withnail, 2017-06-20 12:59:18
No meu caso, foi porque abri a base de dados do navegador SQLite. Quando o fecho do navegador, o problema desaparece.
 9
Author: Aminah Nuraini, 2016-09-12 11:21:35

No meu caso, eu não tinha salvo uma operação de banco de dados que realizei dentro do navegador SQLite. Salvá-lo resolveu o problema.

 0
Author: Varun Krishna, 2018-09-13 21:41:20

Tente este comando:

sudo fuser -k 8000/tcp
 -4
Author: cz game, 2018-01-15 11:56:12