什么';MySQLdb、mysqlclient和MySQL连接器/Python之间的区别是什么?
因此,我一直在尝试使用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
mysqlclient
也应该是一个不错的选择。
这两个版本都在使用修复程序和新功能进行主动更新,您可以通过最近几天的主动提交看到这些功能
注意:我对它们没有太多的经验,所以可能会有这样或那样的情况不能满足您的需要。这两个库都遵循标准,这意味着您至少可以在任何地方使用基本功能
安装和依赖关系
- mysqlclient
- mysql连接器 非常清楚,但是您应该知道依赖性(对于mysql连接器)
- -迄今为止CPython最快的MySQL连接器。需要
c库才能工作mysql-connector-c
- -纯Python MySQL客户端,如果出现以下情况,则应使用
:PyMySQL
- 由于某些原因,您不能使用
libmysqlclient
- 您想使用gevent或eventlet的monkeypatched套接字
- 你不想侵入mysql协议
- 由于某些原因,您不能使用
- -MySQL连接器由Oracle的MySQL小组开发,也完全用Python编写。它的表现似乎是三者中最差的。此外,由于一些许可问题,您无法从PyPI下载它(但现在可以通过conda下载)
mysqlclient
比纯Python客户端快(有时快10倍以上)
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