Django 三种 ENGINE 的区别

ENGINE 本质 连接池 底层驱动 MySQL 8.0 推荐场景
django.db.backends.mysql Django 原生 ❌ 无 mysqlclient 开发 / QPS < 50
dj_db_conn_pool.backends.mysql 第三方连接池 ✅ 有 DBUtils + mysqlclient 生产环境首选
mysql.connector.django MySQL 官方驱动 ❌ 无 mysql-connector-python 兼容优先

1. django.db.backends.mysql --- Django 亲生的

python 复制代码
'ENGINE': 'django.db.backends.mysql',

这是 Django 自带的,不需要装任何额外包。

底层调用 mysqlclient(C 扩展,性能最好)。

特性 说明
连接池 ❌ 没有,每次请求开连接,结束关连接
POOL_OPTIONS ❌ 不认识,直接忽略
性能 ⭐⭐⭐⭐⭐(C 扩展,最快)
稳定性 ⭐⭐⭐⭐(Django 官方维护)
MySQL 8.0 ✅ 兼容(mysqlclient 2.0+)

你之前的配置里写了 POOL_OPTIONS,但它被完全忽略了,等于白写。


2. dj_db_conn_pool.backends.mysql --- 带连接池的

python 复制代码
'ENGINE': 'dj_db_conn_pool.backends.mysql',

这是第三方包,基于 DBUtils.PersistentDB 封装的连接池。

底层还是 mysqlclient,但外面包了一层池化管理。

特性 说明
连接池 ✅ 有,POOL_OPTIONS 生效
POOL_SIZE 池里最多放几个连接
MAX_OVERFLOW 池满了还能额外创建几个
RECYCLE 连接存活多久后强制重建(必须 < MySQL wait_timeout
TIMEOUT 池满时等多久,超时报错
性能 ⭐⭐⭐⭐(多一层封装,损耗极小)
稳定性 ⭐⭐⭐⭐(社区维护,很成熟)
MySQL 8.0 ✅ 兼容

你现在的配置应该用这个,才能让 POOL_OPTIONS 生效。


3. mysql.connector.django --- MySQL 官方出的

python 复制代码
'ENGINE': 'mysql.connector.django',

这是 MySQL 官方团队维护的 Django 后端。

底层用 mysql-connector-python(纯 Python 实现,不是 C 扩展)。

特性 说明
连接池 ❌ 没有(官方认为 Django 自己管就够了)
驱动 纯 Python,不依赖 C 扩展
性能 ⭐⭐⭐(比 mysqlclient 慢 20~30%)
兼容性 ⭐⭐⭐⭐⭐(MySQL 官方维护,8.0 认证插件无缝支持)
部署 ⭐⭐⭐⭐⭐(不用装系统级 mysqlclient,pip install 就行)

什么时候用它?

  • 你的服务器装不了 mysqlclient(缺少编译环境)
  • 用了 MySQL 8.0 的 caching_sha2_password 认证,mysqlclient 版本太老不支持
  • Docker 镜像不想装系统依赖

一张图总结

复制代码
Django 查询
    │
    ├── django.db.backends.mysql ──────────→ mysqlclient(C扩展,快,无池)
    │
    ├── dj_db_conn_pool.backends.mysql ────→ DBUtils 连接池 → mysqlclient(有池,推荐✅)
    │
    └── mysql.connector.django ────────────→ mysql-connector-python(纯Python,兼容好)

你该用哪个?

你的情况 选这个
生产环境,QPS > 50 dj_db_conn_pool.backends.mysql
开发 / 测试 django.db.backends.mysql
装不了 mysqlclient / MySQL 8.0 认证有问题 mysql.connector.django
想要连接池 + 官方驱动 用 ProxySQL(前面博客讲过)

你现在的配置,把 ENGINE 改成 dj_db_conn_pool.backends.mysql,然后 pip install dj-database-url dj-db-conn-pool,重启就能用连接池了。

相关推荐
曲幽35 分钟前
刚部署的 LibreTranslate 频频翻车?我掏出了 20 年前的 StarDict 词典,用 FastAPI 搭了个本地词典翻译 API
python·fastapi·web·translate·goldendict·libretranslate·stardict·pystardict
荣码1 小时前
用Streamlit给AI应用套个界面,10行代码出Web页面
java·python
兵慌码乱10 小时前
基于Python+PyQt5+SQLite的药房管理系统实现:事务一致性与界面解耦全流程解析
python·sqlite·信号与槽·pyqt5·数据库设计·桌面应用开发·事务处理
金銀銅鐵12 小时前
[Python] 体验用欧几里得算法计算最大公约数的过程
python·数学
FreakStudio16 小时前
W55MH32L-EVB 上手测评:硬件 TCP/IP 加持的以太网单片机,MicroPython 零门槛开发
python·单片机·嵌入式·大学生·面向对象·并行计算·电子diy·电子计算机
用户03321266636717 小时前
使用 Python 从零创建 Word 文档
python
Csvn1 天前
Python 两大经典坑点 —— 可变默认参数 & 闭包延迟绑定
后端·python
曲幽1 天前
别再用网页翻译看源码了!你的私人翻译神器LibreTranslate,部署避坑指南来了
python·docker·web·pot·translate·libretranslate·arogstranslate
用户556918817531 天前
#从脚本到独立程序:Python + Playwright 批量抓取的完整踩坑记录
python·自动化运维
兵慌码乱2 天前
基于 MediaPipe 与 PySide2 的手势交互音乐控制系统实现:轻量化视觉交互全流程解析
python·opencv·计算机视觉·人机交互·手势识别·mediapipe·pyside2