所以我一直在尝试用python做一些数据库更新,在设置整个开发环境时,我遇到了这三件让我头晕目眩的事情。
1.有MySQLdb
1.有mysqlclient
1.然后是mysql connector python
每一个都是什么,区别和在哪里使用它们?谢谢
所以我一直在尝试用python做一些数据库更新,在设置整个开发环境时,我遇到了这三件让我头晕目眩的事情。
1.有MySQLdb
1.有mysqlclient
1.然后是mysql connector python
每一个都是什么,区别和在哪里使用它们?谢谢
5条答案
按热度按时间ifsvaxew1#
MySQLdb是一个围绕C模块的瘦Python Package 器,用于实现MySQL数据库的API。
有一段时间以前使用的 Package 器的MySQLDb1版本,现在它被认为是一个遗留。由于MySQLDb 1开始演变到MySQLDb2与错误修复和Python3支持,一个MySQLDb 1是分叉的,这是mysqlclient如何出现,与错误修复和Python3支持。总结,所以现在我们有MySQLDb 2,这是不准备用于生产使用,MySQLDb 1作为一个过时的驱动程序和一个社区支持的mysqlclient,修复了bug并支持Python3。
现在,为了解决这个问题,MySQL提供了他们自己版本的MySQL适配器-mysql connector,这是一个使用MySQL API的所有Python模块,没有C模块依赖性,只使用标准的Python模块。
所以现在的问题是:mysqlclient与mysql连接器的比较.
对我来说,我会选择官方支持的库,但是
mysqlclient
也应该是一个不错的选择。这两个库都在积极地更新修复和新特性,你可以在最近几天的活动提交中看到。安装和依赖项
作为C Package 器的一个分支,它需要C模块与MySQL一起工作,MySQL添加了python头文件来构建这些扩展(请阅读python-dev)。安装取决于您使用的系统,只需确保您知道包名并可以安装它们。
f1tvaqid2#
当前维护的Python MySQL适配器有三个:
mysqlclient
-目前最快的MySQL连接器。需要mysql-connector-c
C库才能工作。PyMySQL
-纯Python MySQL客户端。根据mysqlclient
和PyMySQL
的维护者的说法,在以下情况下应该使用PyMySQL
:libmysqlclient
。mysql-connector-python
-Oracle的MySQL小组开发的MySQL连接器,也是完全用Python编写的。它的性能似乎是三个中最差的。另外,由于一些许可问题,你不能从PyPI下载它(但现在可以通过conda下载)。基准测试
根据下面的基准测试,
mysqlclient
比纯Python客户端更快(有时快10倍以上)。w1e3prcc3#
用户提供了很多选择。聚会有点晚了。但是我的2美分在pypy3.7版本的基准测试上。
如果您想要更快的访问和重复访问,请坚持使用mysqlclient
循环...来自以前的基准测试...
lmvvr0a84#
适用于使用SQLAlchemy的开发人员
这个问题是了解Python有哪些DBAPI以及它们的利弊的一个很好的起点。然而,上面提到的库是不断变化的,它们的性能和问题不是一成不变的。因此,测试各个方言并自己评估它们的性能将是一个很好的方法。
我提供了以下链接,列出了可用的DBAPI。这些链接包括对每个库的文档的引用以及对它们的特性和支持的评论。
要了解DBAPI的一般含义,请使用此链接,并阅读上面提到的PEP-249。此外,下图可以帮助您直观地了解DBAPI属于architecturally。x1c 0d1x
4nkexdtk5#
我还没有做我自己的测试来验证,但根据我所读到的:
如果你用pip安装MySQLdb包或mysqlclient包,那么会安装一个
MySQLdb
模块(例如venv/lib/python3.10/site-packages/MySQLdb/
),所以无论你安装MySQLdb包还是mysqlclient包,你都可以通过导入MySQLdb
来使用它:import MySQLdb
.如果你用pip安装PyMySQL,那么MySQLdb模块不会被安装,但是PyMySQL包含一个
install_as_MySQLdb
函数,可以用来在运行时在内存中定义一个MySQLdb
模块,它实际上引用了PyMySQL。所以有几种方法可以使用PyMySQL:
import pymysql
并像使用MySQLdb
一样使用pymysql
,因为它具有相同的API。1.调用
install_as_MySQLdb
,然后使用import MySQLdb
。(如果依赖项导入MySQLdb
,则这可能很有用。)import pymysql as MySQLdb
.我的印象是**"MySQL连接器/Python"**提供了一个不同的API。
(Django的ORM可以和两个API中的任何一个一起使用,也就是说,它可以和MySQLdb/mysqlclient/PyMySQL API,或者"MySQL连接器/Python" API一起使用。