Django 3.1+ JSONField问题:Linux正常,Windows执行migrate报SQLite不支持错误
解决Windows下Django 3.1 JSONField迁移报错SQLite不支持的问题
嘿,这个坑我之前踩过!虽然Django 3.1推出的JSONField号称支持所有数据库,但这里的“支持”是有前提的——SQLite版本必须≥3.9.0,而Windows系统里Python默认自带的SQLite版本往往比较旧,刚好低于这个要求,这就是为什么Linux上正常(Linux发行版的SQLite通常是较新的),Windows上跑python manage.py migrate就报错。
下面是具体的解决步骤:
第一步:确认当前SQLite版本
先打开Python终端,执行以下命令查看你的SQLite版本:
import sqlite3 print(sqlite3.sqlite_version)
如果输出的版本号低于3.9.0,那就是版本的问题了。
第二步:升级Windows上的SQLite
方法一:替换Python系统目录的sqlite3.dll
- 下载对应你Python位数(32/64位)的最新版
sqlite3.dll文件; - 找到你的Python安装目录(比如
C:\Python38),进入DLLs文件夹; - 把原来的
sqlite3.dll备份一下,然后将下载的新版文件替换进去; - 关闭所有Python相关的终端和编辑器,重新打开后验证版本。
方法二:替换虚拟环境中的sqlite3.dll
如果你用了虚拟环境,直接替换虚拟环境里的文件更稳妥:
- 进入虚拟环境目录(比如
my_project\venv),找到DLLs文件夹; - 同样备份原文件,替换为新版
sqlite3.dll; - 重启虚拟环境后验证版本。
第三步:验证并重新执行迁移
再次运行第一步的代码确认SQLite版本≥3.9.0后,回到项目目录执行:
python manage.py migrate
这次应该就能正常完成迁移了。
备选方案(不推荐)
如果暂时不想升级SQLite,也可以改用第三方的JSON字段库(比如django-jsonfield),但原生的JSONField功能更完善,还是建议优先升级SQLite版本。
内容的提问来源于stack exchange,提问作者Udi
相关产品推荐
相关产品推荐

