CentOS7下Django执行migrate报SQLite版本过低 如何升级SQLite
问题根因
CentOS 7官方软件源默认最高仅提供SQLite 3.7.17版本,而你使用的Django 3.2版本要求SQLite最低版本为3.9.0,版本不匹配触发报错。
升级方案
以下三种方案任选其一即可,推荐优先选方案C,操作最快无系统影响。
方案C:使用预编译pysqlite3包(无需编译,最快生效)
不需要修改系统SQLite版本,仅替换Python调用的SQLite驱动:
- 安装预编译的高版本SQLite驱动包
pip3 install pysqlite3-binary
- 修改Django SQLite驱动加载逻辑:找到Python环境路径下的
django/db/backends/sqlite3/base.py文件,修改开头的sqlite导入代码:
将原代码
from sqlite3 import *
替换为
try: from pysqlite3 import * except ImportError: from sqlite3 import *
- 验证:执行
python manage.py migrate即可正常运行。
方案A:编译安装新版SQLite(不覆盖系统版本)
适合需要系统全局生效新版SQLite的场景,不会破坏依赖旧版SQLite的系统工具(如yum):
- 安装编译依赖工具
yum install -y wget gcc make automake libtool
- 下载SQLite稳定版autoconf格式源码包,解压后进入源码目录
- 配置安装路径并编译安装
./configure --prefix=/usr/local/sqlite make -j$(nproc) && make install
- 添加新版库到系统动态库缓存
echo "/usr/local/sqlite/lib" > /etc/ld.so.conf.d/sqlite.conf ldconfig
- 临时配置环境变量后运行Django即可生效
export LD_LIBRARY_PATH="/usr/local/sqlite/lib:$LD_LIBRARY_PATH" python manage.py migrate
方案B:重编译Python绑定新版SQLite(永久生效)
如果需要Python永久绑定新版SQLite,不需要每次设置环境变量,可以重编译Python:
- 下载对应你当前安装版本(3.6.8)的Python源码包,解压后进入源码目录
- 配置编译参数指定新版SQLite路径
./configure --prefix=/usr/local/python3 --with-sqlite=/usr/local/sqlite make -j$(nproc) && make install
- 验证:执行以下命令,输出大于等于3.9.0即为生效
python3 -c "import sqlite3; print(sqlite3.sqlite_version)"
内容的提问来源于stack exchange,提问作者Shoother
相关产品推荐
相关产品推荐

