Erro operacional: a base de dados está bloqueada
OperationalError: database is locked
Reiniciei o servidor, mas o erro persiste. O que pode ser tudo isto?
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
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()
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.
Tente este comando:
sudo fuser -k 8000/tcp