解决Python连接MySQL报错:缺少cryptography库
在使用 Python 连接 MySQL 数据库时,有时可能会遇到这样的错误:
RuntimeError: 'cryptography' package is required for sha256_password or caching_sha2_password auth methods
这篇文章将带你快速理解该错误的原因,并提供两种实用的解决方法。
🧠 错误原因
MySQL 8.0 及以上版本默认使用 caching_sha2_password
或 sha256_password
认证插件进行用户身份验证,这两种方式比早期的 mysql_native_password
更安全。
而 PyMySQL 默认不包含对这两种认证方式的支持,需要依赖 cryptography
这个第三方加密库来完成密码的加密处理。如果没有安装该库,就会出现上述错误。
📌 解决方法
方法一:安装 cryptography 库(推荐)
如果你有权限安装 Python 包,这是最直接的解决方法。
pip install cryptography
安装完成后重新运行你的 Python 脚本即可。
适用场景:
- 本地开发环境
- CI/CD 流水线
- 可以自主安装依赖的项目
方法二:修改MySQL用户认证方式
如果你有数据库管理员权限,可以将用户认证方式改为传统的 mysql_native_password
。
执行以下SQL语句(请替换用户名和密码):
ALTER USER '用户名' IDENTIFIED WITH mysql_native_password BY '密码';
FLUSH PRRIVILEGES;
适用场景:
- 没有权限安装 Python 包的环境
- 临时测试或兼容旧项目
- 对安全性要求不极高的内网环境
📊 方法对比表
方法 | 优点 | 缺点 | 适用场景 |
---|---|---|---|
安装 cryptography | 安全、官方推荐、一劳永逸 | 需安装额外依赖 | 开发、测试、生产 |
修改认证方式 | 无需安装新包、快速解决 | 安全性降低、需数据库权限 | 临时测试、内网环境 |
🧩 解决方法速览
✅ 总结
- 出现该错误是因为 MySQL 使用了新的加密认证方式,而 PyMySQL 需要
cryptography
库来支持。 - 推荐做法:在开发环境中直接安装
cryptography
。 - 备用方案:若无法安装依赖,可临时将用户认证方式改为
mysql_native_password
。
根据你的实际环境和权限,选择最适合的方案即可顺利连接 MySQL 数据库。
注意:修改认证方式会降低安全性,请谨慎在生产环境中使用。建议在测试或内部系统中使用。