运行Python MySQLdb连接代码时出现caching_sha2_password插件加载失败错误
解决MySQLdb连接时的caching_sha2_password认证错误
这个问题我之前踩过坑!你遇到的OperationalError: (2059, "Authentication plugin 'caching_sha2_password' cannot be loaded: 找不到指定的模块。")错误,本质原因是你用的MySQLdb库版本太老,不支持MySQL 8.0及以上版本默认的caching_sha2_password认证插件。下面给你两种靠谱的解决办法:
方法一:修改MySQL用户的认证方式
直接把目标用户的认证方式改成MySQLdb支持的mysql_native_password,步骤如下:
- 打开MySQL命令行工具,登录你的数据库:
输入密码后进入MySQL交互界面。mysql -u root -p - 执行修改用户认证方式的SQL语句(注意替换成你代码里的用户名、主机和密码):
ALTER USER 'root'@'127.0.0.1' IDENTIFIED WITH mysql_native_password BY 'root'; - 刷新MySQL权限,让修改生效:
FLUSH PRIVILEGES;
完成后再运行你的Python代码,应该就能正常连接了。
方法二:更换支持新认证插件的数据库库
MySQLdb已经很久没有维护了,推荐换成更现代的库,比如pymysql或者mysql-connector-python,它们都支持caching_sha2_password:
用pymysql替代的示例:
- 先安装pymysql:
pip install pymysql - 修改你的Python代码:
import pymysql # 和原来的参数完全一致,只是把MySQLdb换成pymysql db = pymysql.connect(host='127.0.0.1', port=3307, user='root', passwd='root', db='root') cursor = db.cursor() db.close()
如果你不想修改原有代码的导入语句,还可以让pymysql伪装成MySQLdb:
import pymysql # 加上这一行,后续代码里的import MySQLdb就会自动用pymysql替代 pymysql.install_as_MySQLdb() # 原来的代码不用改 import MySQLdb db = MySQLdb.connect(host='127.0.0.1', port=3307, user='root', passwd='root', db='root') cursor = db.cursor() db.close()
简单总结下:如果只是临时解决问题,方法一快速有效;如果是长期项目,更推荐方法二,毕竟用维护活跃的库更靠谱。
内容的提问来源于stack exchange,提问作者shimaa
相关产品推荐
相关产品推荐

