SQLAlchemy+PyMySQL连接MySQL查询数据失败,求解决方法
解决SQLAlchemy连接MySQL时的OperationalError错误
错误原因分析
从错误信息Can't connect to MySQL server on 'word@localhost'能看出,你的连接字符串解析出了问题——MySQL服务器地址被错误识别成了word@localhost,这大概率是因为密码中包含@(或&、=这类URL特殊字符),导致SQLAlchemy把密码里的@当成了用户名和服务器地址的分隔符,进而解析错乱。
修复步骤
1. 对密码做URL编码
如果密码里有@这类特殊字符,必须用urllib.parse.quote_plus()编码后再拼接进连接字符串:
from sqlalchemy import create_engine import pymysql from urllib.parse import quote_plus # 替换成你实际的密码 raw_password = "your_password_with_@" encoded_pwd = quote_plus(raw_password) db_connection_str = f'mysql+pymysql://user:{encoded_pwd}@localhost/my_db' db_connection = create_engine(db_connection_str)
2. 核对连接字符串格式
确保格式完全符合规范:mysql+pymysql://用户名:密码@主机地址:端口号/数据库名
- 若MySQL不是默认3306端口,要补上端口,比如
localhost:3307 - 检查用户名、密码、数据库名有没有拼写错误
3. 先单独测试连接
先跳过Pandas,直接用SQLAlchemy验证连接是否正常,排除Pandas的影响:
with db_connection.connect() as conn: result = conn.execute("SELECT 1") print(result.scalar())
如果能输出1,说明连接没问题,再去执行Pandas读表操作。
4. 确认MySQL服务状态
确保本地MySQL服务在运行:
- Windows:打开服务管理器,找到MySQL服务确认状态为“正在运行”
- Linux/macOS:执行命令
sudo systemctl status mysql查看服务状态
额外排查点
- 要是远程连接MySQL,得确认服务器允许外部访问,且防火墙开放了对应端口
- 检查MySQL用户是否有
my_db数据库和my_table表的访问权限
内容的提问来源于stack exchange,提问作者user20916747
相关产品推荐
相关产品推荐

