首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Python连接MySQL的条条大路

在写程序的时候,我们不免要和数据库打交道。比如,爬虫存储爬来的数据,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码奴与运营汪的结合体

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20190118G0HMBZ00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券