Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Django 3.1+: (fields.E180) SQLite does not support JSONFields

I have created a Django project with the new JSONField announced in Django 3.1, which supports all databases.

I have successfully used this field on a linux machine, but running python manage.py migrate with the same project on Windows fails with the following message:

(fields.E180) SQLite does not support JSONFields.

The same versions of Python and Django are used in both PCs.

like image 473
Udi Avatar asked Jun 29 '20 11:06

Udi


People also ask

Does Django support jsonfields in SQLite?

I have created a Django project with the new JSONField announced in Django 3.1, which supports all databases. I have successfully used this field on a linux machine, but running python manage.py migrate with the same project on Windows fails with the following message: (fields.E180) SQLite does not support JSONFields.

Why do I get a JSON field error when applying migrations?

Applying migrations on an installation using spatialite backend (probably sqlite too) where the path to the database file does not exist causes a confusing JSON field error. Take this following DATABASES configuration. Note that the dev.sqlite3 file does not exist. When running ./manage.py migrate the following exception is raised

How to use json1 extension in Python and Django?

Extract sqlite3.dll from the downloaded DLL archive and put it in the DLLs directory. Now, the JSON1 extension should be ready to be used in Python and Django. Thanks for contributing an answer to Stack Overflow!


1 Answers

For using JSONField with Django 3.1+ and sqlite, the JSON1 sqlite extension must be installed.

To enable JSON1 on sqlite follow the instructions on Django's wiki: https://code.djangoproject.com/wiki/JSON1Extension.

Instructions for Windows:

  • Check your python installation - is it 32bit or 64bit? run: python -c "import platform;print(platform.architecture()[0])"
  • Download the precompiled DLL that matches your Python installation (32-bit or 64-bit).
  • Locate your Python installation. By default, it should be in %localappdata%\Programs\Python\PythonXX, where XX is the Python version. For example, it's located in C:\Users\<username>\AppData\Local\Programs\Python\Python37. If you added Python installation directory to your PATH environment variable, you can run the command where python on a command prompt to locate it. Enter the DLLs directory in your Python installation.
  • Rename (or delete) sqlite3.dll inside the DLLs directory.
  • Extract sqlite3.dll from the downloaded DLL archive and put it in the DLLs directory.
  • Now, the JSON1 extension should be ready to be used in Python and Django.
like image 154
Udi Avatar answered Oct 19 '22 10:10

Udi