因此,我一直在尝试使用python进行一些数据库更新,并且在设置整个开发环境时,遇到了这三件事,这让我感到头晕。
- 然后有一个mysql连接器python
它们各有什么,区别和在哪里使用?谢谢
Answers:
MySQLdb是围绕C模块的瘦Python包装器,该模块实现MySQL数据库的API。
有MySQLDb1包装的版本中使用前一段时间,现在它被认为是一个遗留问题。作为MySQLDb1开始发展到MySQLDb2与bug修复和Python3支持下,MySQLDb1是分叉的,这里是如何的mysql出现,补丁与Python3支持。总结一下,所以现在我们有尚未投入生产的MySQLDb2,过时的驱动程序MySQLDb1和社区支持的mysqlclient以及错误修复和Python3支持。
现在,为了解决这种麻烦,MySQL提供了自己的MySQL适配器版本-mysql connector,这是一个全功能的python模块,它使用MySQL API,没有C模块依赖项,只使用标准的python模块。
因此,现在的问题归结为:mysqlclient vs mysql connector。
对于我来说,我会使用官方支持的库,但是也mysqlclient
应该是一个不错的选择。他们都正在积极地通过修复和新功能进行更新,您可以通过最近几天的活动提交来查看它们。
注意:我对它们没有太多的经验,因此在某些情况下,一个或另一个可能无法满足您的需求。这两个库都遵循PEP-249标准,这意味着您应该在任何地方都至少具备基本功能。
安装和依赖性
作为C包装程序的分支,它要求C模块与MySQL一起使用,该模块添加python头文件来构建这些扩展(请阅读python-dev)。安装取决于所使用的系统,只需确保知道软件包名称并可以安装它们即可。
当前维护着用于Python的MySQL适配器:
mysqlclient
-迄今为止最快的CPython MySQL连接器。需要mysql-connector-c
C库才能工作。
PyMySQL
-纯Python MySQL客户端。根据双方的维护者mysqlclient
和PyMySQL
,你应该使用PyMySQL
,如果:
libmysqlclient
由于某种原因,您无法使用。mysql-connector-python
-由Oracle的MySQL小组开发的MySQL连接器,也完全用Python编写。它的性能似乎是三者中最差的。另外,由于某些许可问题,您不能从PyPI下载它(但现在可以通过conda获得它)。
根据以下基准,mysqlclient
它比纯Python客户端要快(有时快10倍)。
PyMySQL
,如果使用PyPy,看起来仍然是要走的路。
mysqlclient
当数据库URL以开头时,@ vishal AFAIK是sqlalchemy使用的默认连接器mysql://...
。要使用PyMySQL
,请使用开头URL mysql+pymysql://...
。要使用mysql-connector-python
,请使用开头URL mysql+mysqlconnector://...
。有关更多信息,请参见sqlalchemy文档。
用户提供了很多选择。聚会晚点。但是我对pypy 3.7版本的基准测试只差了2美分。
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