MySQLdb、 mysqlclient 和 MySQL 连接器/Python 之间有什么区别?

因此,我一直在尝试用 python 做一些数据库更新,在设置整个开发环境时,我遇到了这三件让我头晕目眩的事情。

  1. 这是 MySQLdb

  2. 这是 Mysqlclient

  3. 然后是 Mysql 连接器 Python

每一个都是什么,有什么区别,在哪里使用? 谢谢

88759 次浏览

MySQLdb 是一个围绕 C 模块的瘦 Python 包装器,它为 MySQL 数据库实现 API。

MySQLDb1版本的包装器使用了一段时间以前,现在它被认为是一个遗产。随着 MySQLDb1在 bug 修复和 Python 3支持下开始演变为 MySQLDb2,MySQLDb1被分叉了,下面是 Mysqlclient的出现,其中包括 bug 修复和 Python 3支持。总之,现在我们有了 MySQLDb2,它还没有准备好投入生产使用,MySQLDb1作为一个过时的驱动程序,社区支持 mysqlclient,提供 bug 修复和 Python 3支持。

现在,为了解决这个问题,MySQL 提供了自己版本的 MySQL 适配器 -Mysql 连接器,这是一个全面的 python 模块,它使用 MySQL API 和 没有 C 模块依赖项,并且只使用标准的 python 模块。

所以现在的问题归结为: mysqlclient 与 mysql 连接器。

对于我来说,我会选择官方支持的库,然而 mysqlclient也应该是一个不错的选择。 它们都在积极地更新修复程序和新特性,您可以在最后几天的活动提交中看到这些特性。

注意: 我没有太多的经验与他们,所以可能会有情况下,一个或另一个不适合您的需要。这两个库都遵循 PEP-249标准,这意味着您至少可以在任何地方使用基本功能。

安装和依赖项

  • Mysqlclient

作为 C 包装器的一个分支,它需要 C 模块与 MySQL 一起工作,MySQL 添加了 python 头文件来构建这些扩展(请阅读 python-dev)。安装取决于您使用的系统,只要确保您知道包的名称,并且可以安装它们。

目前有三个用于 Python 的 MySQL 适配器:

  • mysqlclient -到目前为止 CPython 中最快的 MySQL 连接器。需要使用 mysql-connector-c C 库。

  • PyMySQL -纯 Python MySQL 客户端. 根据 ABC1和 PyMySQL的维护者,如果:

    • 由于某种原因,您不能使用 libmysqlclient
    • 您希望使用 gevent 或 eventlet 的 monkeypatching 套接字。
    • 你不想黑进 mysql 协议。
  • mysql-connector-python -由 Oracle 的 MySQL 小组开发的 MySQL 连接器,也完全用 Python 编写。它的表现似乎是三者中最差的。另外,由于一些许可问题,您无法从 PyPI 下载它(但是现在可以通过 conda 下载它)。

基准

根据以下基准测试,mysqlclient比纯 Python 客户机更快(有时超过10倍)。

用户提供了很多选项。有点晚了。但是我的 < strong > 2 对于 Pypy 3.7版本进行基准测试

如果您想要更快的访问和重复访问,请使用 mysqlclient

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

对于使用 SQLAlchemy 的开发人员

这个问题是了解哪些 DBAPI 可用于 Python 及其权衡的一个很好的起点。然而,上面提到的库是不断变化的,它们的性能和问题并不是一成不变的。因此,测试个别方言,并自己评估他们的表现将是一个很好的方法。

我在下面提供了列出可用 DBAPI 的链接。这些链接包括对每个库的文档的引用以及对其特性和支持的评论。

要理解一般的 DBAPI 是什么,请使用这个 链接,并阅读上面提到的 PEP-249。此外,下面的图可以帮助您可视化 DBAPI 属于 建筑学上的的位置。 enter image description here