Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Django + SQLite how to increase SQLite timeout when "database is locked" error occurs

I am getting the: django.db.utils.OperationalError: database table is locked error (an oh boy are there many copies of that question) all of the answers refer to this page:

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

and although I understand what is going on I clearly don't know Python and Django well enough to understand the instruction. The instruction is to increase the timeout like:

'OPTIONS': {
    # ...
    'timeout': 20,
    # ...
}

but it's not so easy for a-bear-of-very-little-brain to understand exactly where that code goes. Can someone give me a bit more context? Where in my Django project do I specify these sort of options? It can't be a general Django setting can it? Timeout sounds lika a bit too general a name for that...

like image 438
jonalv Avatar asked Feb 05 '23 06:02

jonalv


1 Answers

So, yes it goes in the settings file but not just directly in the settings file but under DATABASES (of course).

My DATABASES part now looks a bit like this:

   DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
        'OPTIONS': {
            'timeout': 20,  # in seconds
            # see also
            # https://docs.python.org/3.7/library/sqlite3.html#sqlite3.connect
        }
    }

}

Which seems to have done the trick. Maybe this was obvious for everyone else or maybe not. It's not always so easy for a-bear-of-very-little-brain.

like image 94
jonalv Avatar answered Feb 06 '23 19:02

jonalv