Python 3.12连接本地MySQL报错问题求助
解决Xubuntu 24.04下Python连接MySQL的两类报错问题
一、mysql.connector报AttributeError: module 'ssl' has no attribute 'wrap_socket'
问题原因
Python 3.12移除了ssl.wrap_socket()接口,而Xubuntu 24.04预装的mysql-connector-python版本过旧,未适配该变更,导致调用时出错。
解决方案
- 卸载系统自带的旧版本依赖
sudo apt remove python3-mysql.connector
- 通过pip安装最新版的
mysql-connector-python
pip install --upgrade mysql-connector-python
- (可选)如果升级后仍有认证问题,可尝试移除连接参数中的
auth_plugin='mysql_native_password',新版本会自动适配MySQL的认证插件。
二、pymysql报OperationalError: (2003, "Can't connect to MySQL server on 'localhost'")
问题原因
使用localhost连接时,pymysql默认优先通过Unix Socket文件连接,但存在两种常见问题:
- MySQL的Socket文件路径与pymysql默认路径不匹配
- MySQL服务未正常运行
解决方案
方案1:改用TCP连接(最简单)
将连接参数中的host改为127.0.0.1,强制使用TCP协议连接:
import pymysql def connectDB(): return pymysql.connect( host="127.0.0.1", user="myuser", password="mypass", database="HomeManagement" )
方案2:指定正确的Socket文件路径
- 先查询MySQL实际使用的Socket路径:
mysql -u myuser -p -e "show variables like 'socket';"
- 在pymysql连接时指定该路径:
import pymysql def connectDB(): return pymysql.connect( host="localhost", user="myuser", password="mypass", database="HomeManagement", unix_socket="/var/run/mysqld/mysqld.sock" # 替换为查询到的实际路径 )
方案3:检查MySQL服务状态
确认MySQL服务是否在运行:
sudo systemctl status mysql
若未运行,启动服务:
sudo systemctl start mysql
内容的提问来源于stack exchange,提问作者pssturges
相关产品推荐
相关产品推荐

