PyMySQL:纯 Python 实现的 MySQL 客户端库
PyMySQL:纯 Python 实现的 MySQL 客户端库
Python 开发者连接 MySQL 数据库,常用的方案就那么几个。官方 mysql-connector-python 依赖 C 扩展,安装配置稍显繁琐;SQLAlchemy 功能完整但侧重 ORM,轻量场景下有点重。如果只想要一个干净、不依赖任何外部库的 MySQL 驱动,PyMySQL 值得关注。

一句话说清楚
PyMySQL 是一个纯 Python 实现的 MySQL 和 MariaDB 客户端库,完全遵循 PEP 249 DB-API 2.0 规范。不依赖任何 C 扩展,不依赖 MySQL Connector/C,pip install PyMySQL 就能用。目前在 GitHub 上积累了 7,836 个 Star。
纯 Python 带来的实际好处
既然有官方的 C 扩展驱动,为什么还要用纯 Python 实现?答案在"零配置"这三个字上。
Windows、Linux、macOS,行为完全一致。不需要单独安装 MySQL 客户端库,不用处理 C 扩展在不同平台上的编译问题。打包进 Docker 镜像,或者部署到离线服务器,PyMySQL 不会在这些环节给你添麻烦。
另一个常被忽略的场景是 PyPy 用户。PyMySQL 是少数原生支持 PyPy 的 MySQL 驱动之一。如果项目跑在 PyPy 上,几乎不需要考虑其他选项。
功能挺全的
- 支持 MySQL 和 MariaDB 全部 LTS 版本
- 兼容 Python 3.9 及以上,包括 PyPy
- 认证方式覆盖 sha256_password、caching_sha2_password、ed25519
- DictCursor 返回字典格式的结果,不用按列索引取值
- 支持 with 语句管理连接和游标,代码简洁
完整的文档托管在 ReadTheDocs,StackOverflow 上的 pymysql 标签也活跃。
代码长什么样
API 设计和 Python 标准库风格一致,没太多学习成本:
connection = pymysql.connect(
host='localhost',
user='user',
password='passwd',
database='db',
cursorclass=pymysql.cursors.DictCursor,
)
with connection:
with connection.cursor() as cursor:
sql = "SELECT `id`, `password` FROM `users` WHERE `email`=%s"
cursor.execute(sql, ('webmaster@python.org',))
result = cursor.fetchone()
print(result)
连接时指定 DictCursor,查询结果直接返回字典,处理起来比元组方便很多。需要注意的是 autocommit 默认关闭,写操作后要记得手动 commit()。
适合哪些场景
小型项目、自动化脚本、教学演示,PyMySQL 的轻量特性在这些场景下很实用。依赖少意味着部署快、调试简单。
对于已经在用 SQLAlchemy 或 Django ORM 的项目,PyMySQL 也可以作为底层驱动,替换掉 C 扩展驱动,减少系统层面的依赖项。MySQL 官方文档里也多次以 PyMySQL 作为 Python 连接的示例。

有什么不足
纯 Python 实现的代价是性能。高并发、海量数据场景下,C 扩展驱动的吞吐量会有优势。不过对绝大多数中小规模应用,这个瓶颈在日常使用中几乎感知不到。
PyMySQL 从 2010 年开始持续维护至今,社区健康,MIT 协议授权。如果你在找一个省心、不折腾的 Python MySQL 驱动,可以试试。

浙公网安备 33010602011771号