pandas.read_sql()不支持直接传host/user/password等连接参数,因其仅接收已建立的sqlalchemy引擎或dbapi2连接对象;必须先用create_engine构建引擎,再传入read_sql。

直接用 pandas.read_sql() 最省事,但必须配对使用支持 MySQL 的 SQLAlchemy 引擎,不能只靠 pandas 自身。
为什么不能直接传 host/user/password 给 read_sql()
pandas.read_sql() 本身不处理数据库连接,它只接受一个已建立的 connection 对象或 SQLAlchemy engine。常见错误是写成 read_sql(query, host='...', user='...') —— 这会报 TypeError: read_sql() got an unexpected keyword argument。
真正要做的,是先用 sqlalchemy.create_engine() 构建连接引擎,再把引擎传进去。
- 必须安装
sqlalchemy和 MySQL 驱动(推荐pymysql,纯 Python、免编译) - 连接字符串格式为:
mysql+pymysql://user:password@host:port/database - 端口不写默认是 3306;密码含特殊字符需用
urllib.parse.quote_plus()编码
如何正确构造 SQLAlchemy 引擎并读取数据
下面是最小可用示例:
from sqlalchemy import create_engine
import pandas as pd
<h1>注意:密码里有 @ / : 等字符时,先 quote_plus 处理</h1><p>password = "p@ss:w0rd"
quoted_password = urllib.parse.quote_plus(password)
engine = create_engine(f"mysql+pymysql://root:{quoted_password}@localhost:3306/mydb")</p><p>df = pd.read_sql("SELECT * FROM users LIMIT 10", engine)
</p>
关键点:
Python 3.14.2是Python编程语言在2025年12月5日发布的稳定版本,属于3.14系列的第二个维护更新。该版本包含了18项修复,重点解决了多进程、数据类及正则表达式等模块的回归问题,并修复了CVE-2025-12084等安全漏洞。此版本标志着自由线程模式(移除GIL)正式获得官方支持,是Python发展的重要里程碑。
- 引擎创建后可复用,不必每次查询都新建
-
read_sql()支持 SQL 字符串或text()对象(后者适合带参数的查询) - 若查大表,加
chunksize=参数分块读取,避免内存爆掉
遇到 Access denied 或 Unknown database 怎么排查
这类错误不是 Pandas 报的,而是底层驱动返回的 MySQL 原始错误,说明连接层就失败了。
-
Access denied for user 'xxx'@'yyy':检查用户名密码、MySQL 是否允许该用户从当前 host 登录(CREATE USER 'u'@'%' IDENTIFIED BY 'p';)、是否执行了FLUSH PRIVILEGES; -
Unknown database 'mydb':确认库名拼写、大小写(Linux 下敏感)、该用户是否有对应库的 USAGE 权限 - 连不上 3306?检查 MySQL 是否在运行(
sudo systemctl status mysql)、是否绑定了127.0.0.1而非0.0.0.0、防火墙是否放行
要不要用 mysql-connector-python 替代 pymysql
可以,但没必要换。两者都能用,区别在于:
-
pymysql纯 Python,安装快(pip install pymysql),调试友好,适合开发和中小规模 -
mysql-connector-python是 Oracle 官方驱动,性能略高,但安装可能卡在编译,且错误信息有时更模糊 - 连接字符串只需改协议头:
mysql+mysqlconnector://...
除非压测发现 pymysql 成为瓶颈,否则别折腾驱动切换 —— 连接逻辑、SQL 写法、异常捕获方式全一样,换驱动不解决根本问题。
最常被忽略的是密码编码和权限配置,而不是函数怎么调用。连不上时,先用 mysql -u root -p -h localhost 手动连一次,确认基础访问没问题,再回 Python 查引擎和查询语句。
Python免费学习笔记(深入):立即使用
在学习笔记中,你将探索 Python 的核心概念和高级技巧!










