当前位置:首页>python>PyMySQL:一个纯Python写的MySQL/MariaDB客户端

PyMySQL:一个纯Python写的MySQL/MariaDB客户端

  • 2026-10-11 08:13:30
PyMySQL:一个纯Python写的MySQL/MariaDB客户端

说实话,刚开始用Python连MySQL那会儿,我是真崩溃。什么MySQLdb编译不通过,什么缺依赖、少头文件……折腾半天连个数据库都连不上,差点劝退。后来同事给我安利了一个叫PyMySQL的东西,说这玩意儿纯Python写的,不用编译,pip install一把梭就能用。

这货到底是个啥?

PyMySQL说白了就是一个纯Python写的MySQL/MariaDB客户端,完全遵循Python官方那个DB-API 2.0规范(就是PEP 249)。这意味着什么呢?就是说,你以前怎么用sqlite3,现在几乎一模一样的用法来操作MySQL,学习成本接近于零。

它支持Python 3.9及以上版本,连PyPy也能跑。而且不光MySQL,MariaDB也完美兼容——毕竟人家官方文档就写着呢。

为啥我推荐你试试?

其实市面上Python连接MySQL的方案不少,但各有各的毛病:

方案
优点
槽点
PyMySQL
纯Python,跨平台,装起来无脑
纯Python实现,极端性能场景可能不如C扩展
mysql-connector-python
官方出品,功能全
体积大,某些版本有坑
MySQLdb
老牌,性能好
编译麻烦,Python 3支持晚,Windows用户噩梦

我觉得PyMySQL最大的优势就是省心。你想想,公司里有人用Mac,有人用Windows,还有用Linux服务器的。要是用MySQLdb,光环境配置就能吵半天。用PyMySQL?一行pip install PyMySQL,完事儿。

装起来有多简单?

真的就这一句:

python3 -m pip install PyMySQL

如果你的MySQL用了sha256_password或者caching_sha2_password这种加密方式(MySQL 8.0默认就是caching_sha2_password),那得装个额外依赖:

python3 -m pip install PyMySQL[rsa]

要是你用MariaDB的ed25519认证,那就:

python3 -m pip install PyMySQL[ed25519]

大部分情况下,普通安装就够用了。

上手代码,真不唬人

我给你写个最简单的例子,连上数据库,插条记录再查出来。假设你有个users表,结构大概长这样:

CREATE TABLE `users` (    `id` int(11) NOT NULL AUTO_INCREMENT,    `email` varchar(255) NOT NULL,    `password` varchar(255) NOT NULL,PRIMARY KEY (`id`)) ENGINE=InnoDB;

然后Python代码这么写:

import pymysql.cursors# 连上数据库connection = pymysql.connect(    host='localhost',    user='你的用户名',    password='你的密码',    database='你的库名',    cursorclass=pymysql.cursors.DictCursor  # 让结果返回字典,方便)# 用with语句自动管理连接with connection:# 先插入一条数据with connection.cursor() as cursor:        sql = "INSERT INTO `users` (`email`, `password`) VALUES (%s, %s)"        cursor.execute(sql, ('xiaoming@example.com', '123456'))# 注意!PyMySQL默认不自动提交,必须手动commit    connection.commit()# 再查出来看看with connection.cursor() as cursor:        sql = "SELECT `id`, `email` FROM `users` WHERE `email`=%s"        cursor.execute(sql, ('xiaoming@example.com',))        result = cursor.fetchone()print(result)

输出差不多是这样:

{'id': 1, 'email': 'xiaoming@example.com'}

看到没?跟用sqlite3几乎一模一样。唯一容易忘的就是那个connection.commit()——我第一次用的时候就忘了,查了半天为什么数据没写进去,尴尬。

几个小坑,提前告诉你

1. 占位符是%s,不管什么类型就算你插的是整数,也写%s。别问为什么,PyMySQL就是这么设计的。别写成%d,会报错。

2. 默认不自动提交上面说了,记得commit。当然你也可以在connect的时候传autocommit=True,但我建议保持默认,手动控制更安全。

3. 游标记得及时关用with connection.cursor() as cursor就自动关了,别自己写close,容易忘。

性能怎么样?

纯Python实现的读写,肯定比C写的MySQLdb慢一点。但实话实说,对于绝大多数业务系统——比如网站后台、爬虫存数据、数据分析工具——这点差别你根本感觉不出来。除非你每秒要怼几万条,那确实得掂量掂量,换个驱动或者上连接池啥的。

最后说两句

PyMySQL是个成熟又稳定的老牌库了,GitHub上星不少,文档也齐全(https://pymysql.readthedocs.io/)。遇到问题去StackOverflow搜一下,基本都能找到答案。

如果你是刚入门的Python新手,或者被其他MySQL驱动搞到头大,听我一句劝:从PyMySQL开始,别一上来就折腾那些需要编译的玩意儿。等以后真有性能需求了再换也不迟,反正接口都一样,换个import的事儿。

项目地址:https://github.com/PyMySQL/PyMySQL

最新文章

随机文章