Python Django怎么连接MySQL 8.0数据库_安装mysqlclient驱动并修改后端配置

千浩姑娘_9313

千浩姑娘_9313

2026-05-15

263人浏览

原创

django默认不支持mysql 8.0的caching_sha2_password认证插件,因mysqlclient仅兼容mysql_native_password;解决方法是执行alter user...identified with mysql_native_password并flush privileges,或改用mysql-connector-python驱动。

python django怎么连接mysql 8.0数据库_安装mysqlclient驱动并修改后端配置

Django 默认不支持 MySQL 8.0 的默认认证方式,直接装 mysqlclient 并填对账号密码大概率会报 Authentication plugin 'caching_sha2_password' cannot be loaded 错误。必须调整 MySQL 用户认证方式或换驱动。

为什么 mysqlclient 在 MySQL 8.0 上连不上

MySQL 8.0 默认用 caching_sha2_password 加密插件,而 mysqlclient(基于 C 的旧驱动)只认老式的 mysql_native_password。这不是 Django 配置问题,是底层协议不兼容。

常见错误现象包括:

  • django.core.exceptions.ImproperlyConfigured: Error loading MySQLdb module(没装好驱动)
  • Authentication plugin 'caching_sha2_password' cannot be loaded(已装但认证失败)
  • Can't connect to local MySQL server through socket(HOST/PORT 错,或 mysqld 没跑)

改 MySQL 用户认证方式(推荐给开发环境)

进 MySQL 命令行(用 root 登录),执行:

ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '123321';

然后刷新权限:

FLUSH PRIVILEGES;

这样 mysqlclient 就能正常握手。注意:这个操作只影响指定用户,不影响其他用户或全局配置。

验证是否生效:

Forge — Python Developer
Forge — Python Developer

Python开发助手 — 自动化脚本、API封装、命令行工具、数据管道、网页爬虫。经过测试的代码,包含错误处理和文档。当你需要...

下载
SELECT user, host, plugin FROM mysql.user WHERE user = 'root';

确认第三列返回的是 mysql_native_password,不是 caching_sha2_password。

settings.py 中 DATABASES 配置要点

改完认证后,DATABASES 字典里必须包含这些字段,缺一不可:

  • 'ENGINE': 'django.db.backends.mysql' —— 不是 mysqlclient,是 Django 内置的后端标识
  • 'NAME' 必须是已存在的数据库名(不能自动创建),比如 'lice_management'
  • 'HOST' 推荐写 '127.0.0.1',别用 'localhost'(Unix socket 和 TCP 行为不同)
  • 'PORT' 写整数 3306,不是字符串 '3306'(Django 会强转,但留着字符串容易在某些版本出错)
  • 不需要加 ?charset=utf8mb4 或时区参数 —— Django 会自动发 SET NAMES utf8mb4 和 SET TIME_ZONE

正确示例:

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'lice_management',
        'USER': 'root',
        'PASSWORD': '123321',
        'HOST': '127.0.0.1',
        'PORT': 3306,
    }
}

装 mysqlclient 的实际难点和绕过方案

Windows 下 pip install mysqlclient 经常失败,因为需要编译 C 扩展、依赖 VC++ 构建工具和 MySQL client headers。

可行做法:

  • 去 https://www.php.cn/link/8bcd446a0b16ce6dbefa3acf438dc512 下载对应 Python 版本 + 系统位数的 .whl 文件(如 mysqlclient‑2.2.4‑cp311‑cp311‑win_amd64.whl),然后 pip install xxx.whl
  • 或者干脆换用 mysql-connector-python(官方纯 Python 驱动,支持 caching_sha2_password):
    → 改 ENGINE 为 'mysql.connector.django'
    → pip install mysql-connector-python
    → 不用改 MySQL 用户认证方式

注意:pymysql 虽然也能用,但需额外加两行 monkey patch(在 __init__.py 里 import 并调用 pymysql.install_as_MySQLdb()),且性能略低,不推荐新项目用。

真正卡住人的从来不是 settings.py 写几行,而是 MySQL 用户认证插件和驱动编译这俩环节。先确认 mysql -u root -p 能登进命令行,再查 plugin 字段,最后才碰 Django 配置 —— 顺序错了,排查就全乱。

Python免费学习笔记(深入):立即使用
在学习笔记中,你将探索 Python 的核心概念和高级技巧!

相关文章

驱动精灵
驱动精灵

驱动精灵基于驱动之家十余年的专业数据积累,驱动支持度高,已经为数亿用户解决了各种电脑驱动问题、系统故障,是目前有效的驱动软件,有需要的小伙伴快来保存下载体验吧!

下载

相关标签:

mysql python django 安装mysql

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
python是前端还是后端
python是前端还是后端

Python属于前端也属于后端,其灵活性和丰富的生态系统使得开发人员能够在不同的领域中灵活运用。本专题为大家提供python相关的文章、下载、课程内容,供大家免费下载体验。

2023.08.11

2563

5

前端和后端的区别
前端和后端的区别

前端关注的是用户界面的设计和交互,而后端则注重数据处理和逻辑控制。想了解更多前端后端的相关内容,可以阅读本专题下面的文章。

2024.03.19

6570

13

后端的主要工作内容介绍
后端的主要工作内容介绍

后端是应用程序的服务端部分,负责核心任务,如数据库交互、业务逻辑处理和响应客户端请求。想了解更多后端的相关内容,可以阅读本专题下面的文章。

2024.03.19

5986

10

python打包成可执行文件
python打包成可执行文件

本专题为大家带来python打包成可执行文件相关的文章,大家可以免费的下载体验。

2023.07.20

1771

4

python能做什么
python能做什么

python能做的有:可用于开发基于控制台的应用程序、多媒体部分开发、用于开发基于Web的应用程序、使用python处理数据、系统编程等等。本专题为大家提供python相关的各种文章、以及下载和课程。

2023.07.25

4624

7

format在python中的用法
format在python中的用法

Python中的format是一种字符串格式化方法,用于将变量或值插入到字符串中的占位符位置。通过format方法,我们可以动态地构建字符串,使其包含不同值。php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

2023.07.31

1749

3

python教程
python教程

Python已成为一门网红语言,即使是在非编程开发者当中,也掀起了一股学习的热潮。本专题为大家带来python教程的相关文章,大家可以免费体验学习。

2023.08.03

27317

23

python环境变量的配置
python环境变量的配置

Python是一种流行的编程语言,被广泛用于软件开发、数据分析和科学计算等领域。在安装Python之后,我们需要配置环境变量,以便在任何位置都能够访问Python的可执行文件。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

2023.08.04

3307

5

python eval
python eval

eval函数是Python中一个非常强大的函数,它可以将字符串作为Python代码进行执行,实现动态编程的效果。然而,由于其潜在的安全风险和性能问题,需要谨慎使用。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

2023.08.04

3307

5

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
PostgreSQL vs MySQL
PostgreSQL vs MySQL

共1课时 | 188人学习