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 连接的示例。

README区域截图

有什么不足

纯 Python 实现的代价是性能。高并发、海量数据场景下,C 扩展驱动的吞吐量会有优势。不过对绝大多数中小规模应用,这个瓶颈在日常使用中几乎感知不到。

PyMySQL 从 2010 年开始持续维护至今,社区健康,MIT 协议授权。如果你在找一个省心、不折腾的 Python MySQL 驱动,可以试试。

posted @ 2026-06-11 13:09  codinglife66  阅读(2)  评论(0)    收藏  举报