所以我一直在尝试使用python进行一些数据库更新,在设置整个开发环境的同时,我遇到了这三件令我晕眩的事情。
他们每个人,他们之间的区别和使用位置是什么?感谢
答案 0 :(得分:53)
MySQLdb是一个围绕C模块的瘦python包装器,它实现了MySQL数据库的API。
前段时间使用了MySQLDb1版本的包装器,现在它被认为是遗产。随着MySQLDb1开始演变为MySQLDb2并修复了错误和Python3支持,MySQLDb1被分叉,这里是mysqlclient出现的方式,错误修正和Python3支持。总结一下,现在我们有MySQLDb2尚未准备好用于生产,MySQLDb1作为过时的驱动程序和社区支持的mysqlclient具有错误修复和Python3支持。
现在,为了解决这个问题,MySQL提供了他们自己的MySQL适配器版本 - mysql connector,一个全能的python模块,它使用MySQL API和 没有C模块依赖 ,只使用标准的python模块。
所以现在问题归结为:mysqlclient vs mysql connector。
至于我,我会选择官方支持的库,但mysqlclient
也应该是一个不错的选择。
他们都正在积极更新修复程序和新功能,您可以在过去几天通过活动提交看到它们。
注意:我对它们没有太多经验,因此可能会出现这样或那样的情况,无法满足您的需求。这两个库都遵循PEP-249标准,这意味着您应该可以在任何地方使用至少基本功能。
安装和依赖
作为C包装器的一个分支,它需要C模块与MySQL一起工作,它添加了python头文件来构建这些扩展(读取python-dev)。安装取决于您使用的系统,只需确保您知道软件包名称并可以安装它们。
答案 1 :(得分:26)
目前维护的是适用于Python的MySQL适配器:
mysqlclient
- 迄今为止CPython最快的MySQL连接器。需要mysql-connector-c
C库才能工作。
PyMySQL
- 纯Python MySQL客户端。 According to the maintainer of both mysqlclient
and MyPySQL
,您应该使用PyMySQL
if:
libmysqlclient
。 mysql-connector-python
- 由MySQL的MySQL小组开发的MySQL连接器,也完全用Python编写。它的表现似乎是三者中最差的。此外,由于某些许可问题,您无法从PyPI下载(但现在可通过conda下载)。
根据以下基准测试,mysqlclient
比纯Python客户端更快(有时快10倍)。
答案 2 :(得分:3)
用户提供的很多选项。聚会晚了一点。但是我的 2 美分,并针对pypy 3.7版本进行了基准测试。
MySQL Connector/Python: 23.096168518066406 [sec]
mysqlclient: 6.815327882766724 [sec]
PyMySQL: 24.616853952407837 [sec]
MySQL Connector/Python: 22.619106769561768 [sec]
mysqlclient: 6.607790231704712 [sec]
PyMySQL: 24.410773038864136 [sec]
循环...来自之前的基准测试...
def q100k(cur):
t = time.time()
for _ in range(100000):
cur.execute("SELECT 1,2,3,4,5,6")
res = cur.fetchall()
assert len(res) == 1
assert res[0] == (1, 2, 3, 4, 5, 6)
return time.time() - t