(fields.E180) SQLite does not support JSONFields.

Enabling JSON1 extension on SQLite

To use django.db.models.JSONField on SQLite, you need to enable the JSON1 extension on Python's sqlite3 library. If the extension is not enabled on your installation, a system error (fields.E180) will be raised. To check if the extension is enabled on your installation, you can do a query with one of the functions included in the extension, e.g. JSON(). For example:

>>> import sqlite3
>>> conn = sqlite3.connect(':memory:')
>>> cursor = conn.cursor()
>>> cursor.execute('SELECT JSON(\'{"a": "b"}\')')

If the query doesn't throw any errors, then the JSON1 extension is already enabled. Otherwise, follow the instructions below according to your operating system to set it up correctly.

Linux

On most major Linux distributions, the JSON1 extension is included in their SQLite and/or Python packages and enabled by default. If that's not the case on your installation, then do the following:

  • Download the SQLite amalgamation, with or without the configuration script.

  • Extract the source code archive and enter the directory of the result.

  • Compile the source code using the -DSQLITE_ENABLE_JSON1 flag to enable the JSON1 extension. For example:

    gcc -DSQLITE_ENABLE_JSON1 -c -fPIC sqlite3.c
    

    To enable other extensions, see the compilation instructions.

  • Create a shared library. For example:

    gcc -shared -o libsqlite3.so -fPIC sqlite3.o -ldl -lpthread
    
  • Place the resulting file (libsqlite3.so) in a desired directory, e.g. /usr/lib/sqlite3/.

  • Set the LD_PRELOAD environment variable to use your compiled SQLite every time you run Django. For example:

    export LD_PRELOAD=/usr/lib/sqlite3/libsqlite3.so
    
  • Now, the JSON1 extension should be ready to be used in Python and Django.

macOS

As of Python 3.7, the official Python installer on macOS already includes the JSON1 extension by default. If you're using an earlier version of Python or unofficial installers, you can follow the instructions for Linux above, but instead of setting the LD_PRELOAD environment variable, use DYLD_LIBRARY_PATH. For example:

export DYLD_LIBRARY_PATH=/usr/lib/sqlite3

Windows

As of Python 3.9, the official Python installer on Windows already includes the JSON1 extension by default. If you're using an earlier version of Python or unofficial installers, you can do the following:

  • 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.
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值