MySQLdb、mysqlclient和MySQL connector/Python有什么区别?

2024-09-24 22:18:50 发布

您现在位置:Python中文网/ 问答频道 /正文

所以我一直在尝试用python进行一些数据库更新,在设置整个dev环境时,我遇到了这三件事,这让我头晕。

  1. MySQLdb

  2. mysqlclient

  3. 然后是一个mysql connector python

它们各有什么区别,在哪里使用?谢谢


Tags: dev数据库connector环境mysqlmysqlclientmysqldb区别
3条回答

A lot of options provided by users. Little late to party. But my 2 cents in on with benchmarking for pypy 3.7 version.

如果您想要更快的访问和重复访问,请坚持使用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

目前正在维护用于Python的MySQL适配器:

  • ^{}-目前为止最快的MySQL连接器。需要mysql-connector-cC库才能工作。

  • ^{}-纯Python MySQL客户端。According to the maintainer of both ^{} and ^{},您应该使用PyMySQL,如果:

    • 出于某种原因,您不能使用libmysqlclient
    • 您要使用gevent或eventlet的monkeypatched插座。
    • 你不能破解mysql协议。
  • ^{}-MySQL连接器是由Oracle的MySQL小组开发的,也是完全用Python编写的。它的表现似乎是三项中最差的。另外,由于一些许可问题,您不能从PyPI下载它(但现在可以通过conda获得)。

基准

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

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

很久以前有一个MySQLDb1版本的包装器,现在它被认为是一个遗留的。当MySQLDb1开始演变成MySQLDb2并支持bug修复和Python3时,MySQLDb1被分叉,这里是mysqlclient如何出现的,并支持bug修复和Python3。综上所述,现在我们有了尚未准备好投入生产使用的MySQLDb2,MySQLDb1是一个过时的驱动程序,还有一个社区支持的mysqlclient,它提供了bug修复和Python3支持。

现在,为了解决这个问题,MySQL提供了自己版本的MySQL适配器-mysql connector,这是一个使用MySQL API的all-in-python模块,没有C模块依赖关系,只使用标准python模块。

所以现在的问题归结为:mysqlclient与mysql connector。

至于我,我会选择官方支持的库,但是mysqlclient也应该是一个不错的选择。 这两个版本都在使用修复程序和新功能进行主动更新,您可以通过前几天的主动提交看到这些功能。

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

安装和依赖项

  • mysqlclient公司

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

相关问题 更多 >