在写程序的时候,我们不免要和数据库打交道。比如,爬虫存储爬来的数据,Web网站存储数据,数据分析读数据保存结果,都免不了读写数据库。
作为一款著名的开源数据库,MySQL往往是一个方便快捷的选择。而Python出了名的库多,当然连接MySQL的的库也是不少。虽然库很多,但都遵循一个标准:[PEP-249] Python Database API Specification v2.0。所以,它们的接口也基本上一致,使用起来也方便。
虽然这些MySQL的Python库接口都一样,但它们的性能、受欢迎度还是有所差别的。下面我们就讨论一下各自的特点,以便选择适合我们自己的库。
(1)MySQLdb
这可能是最古老的连接MySQL的Python库,基于MySQL C API开发,所以它依赖MySQL库:libmysqlclient。
支持的Python版本:
2.4 - 2.7,不支持3.0+
PyPI主页:
https://pypi.org/project/MySQL-python/
PyPI安装:
pip install MySQL-python
代码网址:
http://sourceforge.net/projects/mysql-python
代码还是放在古老的SourceForge上,且年久失修不再更新。从这里可以追溯到0.9.1版本是发布于2001年。
这个库在Python 2时代用的很多,也是我用Python2时一直使用的库。但在Python 3时代,它停滞了。取而代之的是,mysqlclient。
(2)mysqlclient
从MySQLdb继承而来,添加了对python 3的支持,同时修复bug。
支持的Python版本:
2.7, 3.4+
PyPI主页:
https://pypi.org/project/mysqlclient/
PyPI安装:
pip install mysqlclient
代码网址:
https://github.com/PyMySQL/mysqlclient-python
github上获得1300+个星,一直都更新。这个github仓库就是后面PyMySQL组织维护的。
如果你想升级Python 2代码到3,那时用的是MySQLdb,又想继续享受MySQL C API带来的快速,可以考虑这个库。
以上两个MySQL库都是基于C API,并且不支持asyncio。而数据库读写其实就是IO,利用异步IO来操作,可以提高你的程序的并发性。比如,异步爬虫、异步web。于是,就出现了纯Python实现的PyMySQL,当然它还不是异步的,异步的是基于它的aiomysql。
(3)PyMySQL✔️
基于 PEP-249 规范使用纯Python开发的MySQL连接库,是相当活跃的一个库,github有4700+个星。如果你已经开始使用Python 3(难度不是必须用3了么),强烈推荐使用这个库。我转到Python 3后就开始使用这个库了,并仿照tornado对MySQLdb的封装对其进行了封装。微信公众号回复pymysql可以获得封装后的源码。
支持的Python版本:
2.7, 3.5+
PyPI主页:
https://pypi.org/project/PyMySQL/
PyPI安装:
pip install PyMySQL
代码网址:
https://github.com/PyMySQL/PyMySQL
(4)aiomysql
通过asyncio来访问MySQL数据库,基于PyMySQL。在你的程序需要异步访问数据库时就可以用此库。我在使用异步web框架Sanic时,也做了类似对PyMySQL的封装叫做 SanicDB。这样,无论我是异步还是同步访问数据库时,接口基本一致,方便我写代码而已。
支持的Python版本:
3.5+, await/async 语法支持
PyPI主页:
https://pypi.org/project/aiomysql/
PyPI安装:
pip install aiomysql
代码网址:
https://github.com/aio-libs/aiomysql
github上这个https://github.com/aio-libs/ 有各种支持asyncio的库,包括大名鼎鼎的 aiohttp、aiomysql、aiopg等。当你的 Python 需要异步操作时,不妨到那里去看看,或许有所发现。
(5)MySQL Connector/Python
这是MySQL官方的库,竟然还以两种方式实现:纯Python和基于MySQL的C库。这个官方的我之前怎么一直没遇到呢?没有用过也就不做过多评论了。有用过的朋友可以留言说说使用心得哦。
支持的Python版本:2.7,3.5+,
PyPI主页:
https://pypi.org/project/mysql-connector-python/
PyPI安装:
pip install mysql-connector-python
官方网址:
https://dev.mysql.com/downloads/connector/python/
除了上面这些MySQL库,还有些库已经不再更新就不介绍了。另外,通过ODBC连接MySQL的库也有,用的很少,需要的自取吧。
结尾:关于ORM
上面介绍的都是API级别的读写MySQL,进一步的封装就是ORM了。对于ORM,不同的人有不同的喜好。对于我来说,它过于繁琐,不然写SQL简洁。但有些人的观点却恰恰相反。在我看来,ORM的好处是,对于换数据库很方便。如果你前期用的MySQL,后来要换成PostgreSQL,ORM在这个时候就凸显了它的方便,可能仅仅是几行代码的修改量。但是,我一直用MySQL也不打算换库,所以就一直“简单”的写SQL了。
一个十年Python码奴与运营汪的结合体
领取专属 10元无门槛券
私享最新 技术干货