Python:PyMySQL错误:RuntimeError: ‘cryptography’ package is required for sha256_password or caching_sha2_password auth methods
错误发生在使用Python的模块包【pymysql】连接MySQL数据库的时候,具体的错误信息如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
D:\Pycharm_data\Database_All_In_One\venv\Scripts\python.exe D:/Pycharm_data/Database_All_In_One/mysql_database.py Traceback (most recent call last): File "D:/Pycharm_data/Database_All_In_One/mysql_database.py", line 39, in <module> obj_mysql = mysql_database( File "D:/Pycharm_data/Database_All_In_One/mysql_database.py", line 10, in __init__ obj_mysql_connect = pymysql.connect( File "D:\Pycharm_data\Database_All_In_One\venv\lib\site-packages\pymysql\__init__.py", line 94, in Connect return Connection(*args, **kwargs) File "D:\Pycharm_data\Database_All_In_One\venv\lib\site-packages\pymysql\connections.py", line 327, in __init__ self.connect() File "D:\Pycharm_data\Database_All_In_One\venv\lib\site-packages\pymysql\connections.py", line 588, in connect self._request_authentication() File "D:\Pycharm_data\Database_All_In_One\venv\lib\site-packages\pymysql\connections.py", line 874, in _request_authentication auth_packet = _auth.caching_sha2_password_auth(self, auth_packet) File "D:\Pycharm_data\Database_All_In_One\venv\lib\site-packages\pymysql\_auth.py", line 323, in caching_sha2_password_auth data = sha2_rsa_encrypt(conn.password, conn.salt, conn.server_public_key) File "D:\Pycharm_data\Database_All_In_One\venv\lib\site-packages\pymysql\_auth.py", line 201, in sha2_rsa_encrypt raise RuntimeError("'cryptography' package is required for sha256_password or caching_sha2_password auth methods") RuntimeError: 'cryptography' package is required for sha256_password or caching_sha2_password auth methods Process finished with exit code 1 |
发生这个问题的时候,代码内容如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 |
# 导入 import pymysql # 类 class mysql_database: # 构造函数 def __init__(self, ip_addr, username, password, database_name=""): self.obj_mysql_connect = pymysql.connect( host = ip_addr, user = username, password = password, database = database_name, charset = "utf8" ) self.obj_mysql_cursor = self.obj_mysql_connect.cursor() # 关闭阶段 def __del__(self): self.obj_mysql_cursor.close() self.obj_mysql_connect.close() # 执行SQL语句 def mysql_sql_execute(self, sql): # 返回值 data_return = "" # 处理 self.obj_mysql_cursor.execute(sql) data_return = self.obj_mysql_cursor.fetchall() # 显示 print("================") print(data_return) print("================") # 返回阶段 return data_return # main() if __name__ == "__main__": obj_mysql = mysql_database( ip_addr="192.168.126.141", username="root", password="你的密码" ) obj_mysql.mysql_sql_execute("select version()") |
解决方法:
安装Python的模块包:cryptography
安装完成后,再次执行,就没问题了:
1 2 3 4 5 6 |
D:\Pycharm_data\Database_All_In_One\venv\Scripts\python.exe D:/Pycharm_data/Database_All_In_One/mysql_database.py ================ (('8.0.20-11',),) ================ Process finished with exit code 0 |