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
相关产品推荐
相关产品推荐

