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

Streamlit项目SQLAlchemy连接MySQL报Unknown server host错误求助

问题原因与修复方案

问题根因

OperationalError: (2005, "Unknown MySQL server host '@localhost' (11003)")

该报错核心原因是数据库连接串的特殊字符未转义:
SQLAlchemy的MySQL连接串默认格式为 mysql://[用户名]:[密码]@[主机地址]:[端口]/[库名],@ 是分隔密码和主机地址的保留字符。你的密码为Soumik18@,其中包含未转义的@,系统解析连接串时会把第一个@识别为密码和主机的分隔符,错误将Soumik18判定为密码,把后续的@localhost判定为主机地址,因此触发未知主机报错。

修复方案

方案1:手动转义特殊字符

将密码中的@替换为对应的URL编码值%40即可,修改后的代码如下:

# creating sql engine
engine = create_engine('mysql://root:Soumik18%40@localhost:3306/college')
df.to_sql('Students', con=engine, if_exists='append', index=False)

补充说明:to_sql建议根据业务需求添加if_exists参数控制写入策略(append为追加数据、replace为覆盖整表),添加index=False避免把DataFrame的索引列写入数据表。

方案2:自动转义特殊字符(更稳妥,适合密码含多个特殊字符的场景)

使用urllib.parse.quote_plus自动处理密码中的所有特殊字符,避免手动转义出错:

from urllib.parse import quote_plus
from sqlalchemy import create_engine

# 单独定义密码后自动转义
password = quote_plus('Soumik18@')
# 拼接连接串
engine = create_engine(f'mysql://root:{password}@localhost:3306/college')
df.to_sql('Students', con=engine, if_exists='append', index=False)

可选兼容处理

如果运行后提示缺少MySQLdb依赖,可执行pip install mysqlclient安装对应驱动;如果习惯使用pymysql,可将连接串前缀改为mysql+pymysql://,提前执行pip install pymysql安装依赖即可。


内容的提问来源于stack exchange,提问作者Tauro

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.17 04:45:06