什么';MySQLdb、mysqlclient和MySQL连接器/Python之间的区别是什么?

什么';MySQLdb、mysqlclient和MySQL连接器/Python之间的区别是什么?,python,mysql,database,mysql-python,mysql-connector,Python,Mysql,Database,Mysql Python,Mysql Connector,因此,我一直在尝试使用python进行一些数据库更新,在设置整个开发环境时,我遇到了这三件事,这让我感到头晕目眩 有 有 然后有一个 它们各自有什么不同,在哪里使用它们?Thank是一个围绕C模块的瘦python包装器,它实现了MySQL数据库的API 有一个版本的包装使用了一段时间,现在它被认为是一个遗产。随着MySQLDb1开始演变为具有bug修复和Python3支持的MySQLDb1,一个MySQLDb1被分叉了,下面是如何出现的,具有bug修复和Python3支持。总之,现在我们有了My

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

  • 然后有一个
  • 它们各自有什么不同,在哪里使用它们?Thank

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

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

    现在,为了解决这个问题,MySQL提供了自己版本的MySQL适配器,这是一个全套python模块,使用MySQL API,不依赖C模块,只使用标准python模块

    现在问题归结到:mysqlclient与mysql连接器

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

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

    安装和依赖关系

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

    • mysql连接器 非常清楚,但是您应该知道依赖性(对于mysql连接器)

    目前维护的Python MySQL适配器有:

    • -迄今为止CPython最快的MySQL连接器。需要
      mysql-connector-c
      c库才能工作

    • -纯Python MySQL客户端,如果出现以下情况,则应使用
      PyMySQL

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

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

    用户提供了很多选项。派对有点晚了。但是我的2 在pypy 3.7版本的基准测试中,美分

    如果您想要更快的访问和重复访问,请坚持使用mysqlclient 循环。。。从以前的基准测试

    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
    

    大多数语言都有多个数据库适配器层,其复杂度、支持度和质量各不相同。mysqlclient是MySQLdb的一个分叉版本,支持python3.3+,mysql连接器是mysql的官方模块。我们还有pymysqlSo。如果使用PyPy,PyMySQL看起来仍然是一条路要走。如果您在编译mysqlclient时遇到问题,您可以通过wheel包安装它,如下所述:sqlalchemy支持mysqlclient吗?@vishal AFAIK
    mysqlclient
    是默认设置数据库URL以
    开头时sqlalchemy使用的连接器mysql://...
    。要使用
    PyMySQL
    ,请使用
    mysql启动URL+pymysql://...
    。要使用
    mysql-connector-python
    ,请使用
    mysql+mysql启动URLconnector://...
    。有关更多信息,请参阅。
    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