Python連接MySQL報(bào)錯(cuò):缺少cryptography庫的解決辦法
發(fā)現(xiàn)問題
在使用 Python 連接 MySQL 數(shù)據(jù)庫時(shí),有時(shí)可能會(huì)遇到這樣的錯(cuò)誤:
RuntimeError: 'cryptography' package is required for sha256_password or caching_sha2_password auth methods
這篇文章將帶你快速理解該錯(cuò)誤的原因,并提供兩種實(shí)用的解決方法。
錯(cuò)誤原因
MySQL 8.0 及以上版本默認(rèn)使用 caching_sha2_password 或 sha256_password 認(rèn)證插件進(jìn)行用戶身份驗(yàn)證,這兩種方式比早期的 mysql_native_password 更安全。
而 PyMySQL 默認(rèn)不包含對(duì)這兩種認(rèn)證方式的支持,需要依賴 cryptography 這個(gè)第三方加密庫來完成密碼的加密處理。如果沒有安裝該庫,就會(huì)出現(xiàn)上述錯(cuò)誤。
解決方法
方法一:安裝 cryptography 庫(推薦)
如果你有權(quán)限安裝 Python 包,這是最直接的解決方法。
pip install cryptography
安裝完成后重新運(yùn)行你的 Python 腳本即可。
適用場(chǎng)景:
- 本地開發(fā)環(huán)境
- CI/CD 流水線
- 可以自主安裝依賴的項(xiàng)目
方法二:修改MySQL用戶認(rèn)證方式
如果你有數(shù)據(jù)庫管理員權(quán)限,可以將用戶認(rèn)證方式改為傳統(tǒng)的 mysql_native_password。
執(zhí)行以下SQL語句(請(qǐng)?zhí)鎿Q用戶名和密碼):
ALTER USER '用戶名' IDENTIFIED WITH mysql_native_password BY '密碼'; FLUSH PRRIVILEGES;
適用場(chǎng)景:
- 沒有權(quán)限安裝 Python 包的環(huán)境
- 臨時(shí)測(cè)試或兼容舊項(xiàng)目
- 對(duì)安全性要求不極高的內(nèi)網(wǎng)環(huán)境
方法對(duì)比表
| 方法 | 優(yōu)點(diǎn) | 缺點(diǎn) | 適用場(chǎng)景 |
|---|---|---|---|
| 安裝 cryptography | 安全、官方推薦、一勞永逸 | 需安裝額外依賴 | 開發(fā)、測(cè)試、生產(chǎn) |
| 修改認(rèn)證方式 | 無需安裝新包、快速解決 | 安全性降低、需數(shù)據(jù)庫權(quán)限 | 臨時(shí)測(cè)試、內(nèi)網(wǎng)環(huán)境 |
解決方法速覽

總結(jié)
- 出現(xiàn)該錯(cuò)誤是因?yàn)?MySQL 使用了新的加密認(rèn)證方式,而 PyMySQL 需要
cryptography庫來支持。 - 推薦做法:在開發(fā)環(huán)境中直接安裝
cryptography。 - 備用方案:若無法安裝依賴,可臨時(shí)將用戶認(rèn)證方式改為
mysql_native_password。
根據(jù)你的實(shí)際環(huán)境和權(quán)限,選擇最適合的方案即可順利連接 MySQL 數(shù)據(jù)庫。
注意:修改認(rèn)證方式會(huì)降低安全性,請(qǐng)謹(jǐn)慎在生產(chǎn)環(huán)境中使用。建議在測(cè)試或內(nèi)部系統(tǒng)中使用。
到此這篇關(guān)于Python連接MySQL報(bào)錯(cuò):缺少cryptography庫的解決辦法的文章就介紹到這了,更多相關(guān)缺少cryptography庫內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
用Python實(shí)現(xiàn)童年貪吃蛇小游戲功能的實(shí)例代碼
這篇文章主要介紹了用Python實(shí)現(xiàn)童年貪吃蛇小游戲功能的實(shí)例代碼,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-12-12
opencv實(shí)踐項(xiàng)目之圖像拼接詳細(xì)步驟
OpenCV的應(yīng)用領(lǐng)域非常廣泛,包括圖像拼接、圖像降噪、產(chǎn)品質(zhì)檢、人機(jī)交互、人臉識(shí)別、動(dòng)作識(shí)別、動(dòng)作跟蹤、無人駕駛等,下面這篇文章主要給大家介紹了關(guān)于opencv實(shí)踐項(xiàng)目之圖像拼接的相關(guān)資料,需要的朋友可以參考下2023-05-05
django rest framework 實(shí)現(xiàn)用戶登錄認(rèn)證詳解
這篇文章主要介紹了django rest framework 實(shí)現(xiàn)用戶登錄認(rèn)證詳解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-07-07
一文詳解凱撒密碼的原理及Python實(shí)現(xiàn)
凱撒密碼是古羅馬愷撒大帝用來對(duì)軍事情報(bào)進(jìn)行加密的算法,它采用了替換方法對(duì)信息中的每一個(gè)英文字符循環(huán)替換為字母表序列該字符后面第三個(gè)字符。本文主要為大家講解了凱撒密碼的原理及實(shí)現(xiàn),需要的可以參考一下2022-08-08
Python列表之間的數(shù)字與字符轉(zhuǎn)化實(shí)例
在python列表操作中,面對(duì)需要把列表中的字符串轉(zhuǎn)為禮拜的操作,無需強(qiáng)轉(zhuǎn),通過簡(jiǎn)單的幾步就可以實(shí)現(xiàn),下面這篇文章主要給大家介紹了關(guān)于Python列表之間的數(shù)字與字符轉(zhuǎn)化的相關(guān)資料,需要的朋友可以參考下2023-02-02
python 剪切移動(dòng)文件的實(shí)現(xiàn)代碼
移動(dòng)復(fù)制文件通過os.rename方法,先進(jìn)行文件是否存在判斷,如需更加復(fù)雜相同文件判斷可以根據(jù)文件屬性進(jìn)行判斷,此處只使用同名檢查,并刪除已存在文件,來實(shí)現(xiàn)覆蓋。這篇文章主要介紹了python 剪切移動(dòng)文件的實(shí)現(xiàn)代碼,需要的朋友可以參考下2018-08-08

