You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 08:30:40