Python3 使用 pymysql 连接 MySQL 8.0 报错解决

本文介绍了在使用Python3的pymysql模块连接MySQL8.0时遇到的密码加密方式改变导致的错误问题。由于MySQL8.0开始默认采用更安全的加密方式,导致旧的连接方式无法正常工作。解决方法是升级pymysql到高版本,如1.4以上,或者参考Navicat Premium 15的破解安装教程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、问题

使用 pymysql 连接 MySQL 8.0 时,报错如下:

RuntimeError: 'cryptography' package is required for sha256_password or caching_sha2_password auth methods

二、原因

MySQL 8.0 改变了密码加密方式。

MySQL 8.0 之前版本的密码加密方式为:

mysql_native_password

为了提供更安全的密码加密方式,从 MySQL 8.0 版本开始,默认使用密码加密方式为:

caching_sha2_password

三、解决

pip install cryptography

END.

另外,使

Python中,使用pymysql和pooledDB库连接并管理MySQL 8.0版本的数据库池可以通过以下步骤实现: 1. **安装必要的库**: 首先需要安装`pymysql`和`pooled-db`这两个库。可以使用pip进行安装: ``` pip install pymysql pooled-db ``` 2. **创建数据库连接池**: 使用`pooled-db`创建一个数据库连接池。这可以通过定义一个工厂函数来完成,该函数负责创建新的数据库连接。例如: ```python from pooled_db import PooledDB import pymysql def create_connection(): return pymysql.connect(host='localhost', user='yourusername', password='yourpassword', database='yourdatabase', charset='utf8mb4', cursorclass=pymysql.cursors.DictCursor) pool = PooledDB(create_connection, mincached=2, maxcached=5, maxconnections=10, blocking=True, timeout=30) ``` 3. **使用连接池获取连接**: 一旦连接池被创建,你可以使用它来获取数据库连接。每次调用`connection()`方法时,如果池中有空闲的连接,它将返回一个连接;如果没有,它将等待直到有可用连接或超时: ```python connection = pool.connection() ``` 4. **执行数据库操作**: 使用获取的连接执行SQL查询或其他数据库操作。例如: ```python with connection() as conn: with conn.cursor() as cursor: sql = "SELECT * FROM your_table" cursor.execute(sql) results = cursor.fetchall() for row in results: print(row) ``` 5. **关闭连接**: 虽然在使用with语句块时,连接会在块结束时自动关闭,但显式关闭连接也是一个好习惯: ```python pool.dispose() ``` 通过以上步骤,你可以在Python使用pymysql和pooledDB库有效地连接并管理MySQL 8.0版本的数据库池。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序员的一天

~呀哈,感谢支持

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值