python连接到本地的mysql数据库(python连接mysql使用mysqldb和mysqlclientpymysql三者的异同)

一、三者的异同1.1 简单介绍

1. MySQLdb和mysqlclient 的区别:

MySQLdb只支持Python 2.x 版本,mysqlclient 是MySQLdb的一个分支,解决了python 3.x 的兼容问题。

2. mysqlclient

1)是一个C扩展模块,编译安装可能会导致报各种错误,明显没有pyMySQL方便

2)速度快;

3. pymysql

1)纯python实现的,安装简单(直接pip安装)

2) 由于纯Python实现的,可以很好的跟gevent框架结合

1.2 异同点及选择

pymysql 和 mysqlclient 目前是python连接mysql 的主流方式。

同:两个库的作者是同一个人INADA Naoki,pip库邮箱都指向mailto:songofacandy@gmail.com

异:mysqlclient 速度比pymysql 更快;pymysql更加简单易使用。

一般要选择 mysqlclient,除非以下三种情况:

1)你不能用libmysqlclient出于某种原因

2)你想使用gevent or eventlet 配合

3) 考虑mysql协议兼容性

原文是这样的:

mysqlclient-python is much faster than PyMySQL.

When to use PyMySQL is:

You can't use libmysqlclient for some reason

You want to use monkeypatched socket of gevent or eventlet

You wan't to hack mysql protocol

上面的原因,导致目前使用pymysql的程序员远超过mysqlclient,特别是第二条,现在的python站点,基本都要用gevent或者eventlet吧。

目前pymysql和mysqlclient的各项指标对比:

https://python.libhunt.com/compare-mysqlclient-python-vs-pymysql

目前,,大多程序猿选择了简单易用但是性能较差的pymysql。pymysql比mysqlclient慢许多,如果是大项目pymysql 的弱势会被放大。建议还是使用速度较快的mysqlclient 。


二、安装库2.1 安装mysqlclient

关于mysqlclient 的安装,可以先试试以下命令进行安装:

pip install mysqlclient

附一张图:

python连接到本地的mysql数据库(python连接mysql使用mysqldb和mysqlclientpymysql三者的异同)(1)

如果一直安装失败,试试通过自己下载mysqlclient 的wheel文件:

https://www.lfd.uci.edu/~gohlke/pythonlibs/#mysqlclient

python连接到本地的mysql数据库(python连接mysql使用mysqldb和mysqlclientpymysql三者的异同)(2)

mysqlclient-1.4.6 是版本号

cp36、cp37是python的版本

win32、win_amd64是windows版本

下载完,打开cmd(win R,输入cmd,回车)切换到对应的路径:

  • windows系统

如果是C盘,直接用以下命令:

cd [文件路径]

在其他盘,需要多一步切换盘符,假设是D盘,在cmd先输入d: ,回车,切换到D盘之后再用【cd [文件路径]】,注意:cd和路径间有一个空格。

python连接到本地的mysql数据库(python连接mysql使用mysqldb和mysqlclientpymysql三者的异同)(3)

  • Mac系统只有一个盘直接使用以下路径即可。

cd [文件路径]

有一个简单的路径获取方法:把路径拖到cmd或终端即可查看。

切换成功之后,进入下一步,安装文件:

pip install mysqlclient-1.4.6-cp36-cp36m-win_amd64.whl

安装完文件,最后一步,安装模块(Mac使用pip3):

pip install mysqlclient

当然,也可以直接去官方网站下载压缩包。

官方链接:https://pypi.org/project/mysqlclient/#files

选择对应的版本下载~(好像没有指定Mac的,直接下载最后一个源包)

python连接到本地的mysql数据库(python连接mysql使用mysqldb和mysqlclientpymysql三者的异同)(4)

2.2 安装pymysql

打开cmd,或终端 直接pip install pymysql 即可,如果安装不了,到官方下载库进行安装:

pymysql官方下载链接:https://pypi.org/project/PyMySQL/#files


三、测试:_gevent_waiter

其实,

强大的mysqlclient已经解决了,mysqlclient目前也是可以使用gevent了。直接上代码:

python连接到本地的mysql数据库(python连接mysql使用mysqldb和mysqlclientpymysql三者的异同)(5)

import MySQLdb import gevent.hub def _gevent_waiter(fd, hub=gevent.hub.get_hub()): hub.wait(hub.loop.io(fd, 1)) conn = MySQLdb.connect( db=self.db, host=self.host if not self.ssh else LOOPBACK_ADDRESS, port=self.port if not self.ssh else int(self.ssh.local_bind_port), user=self.user, password=self.passwd, charset=self.charset, connect_timeout=self.connect_timeout, cursorclass=DictCursor, use_unicode=True, waiter=_gevent_waiter,

python连接到本地的mysql数据库(python连接mysql使用mysqldb和mysqlclientpymysql三者的异同)(6)

上面的连接方式,其他参数不多解释了,就说waiter吧,有了这个相当于mysqlclinet可以完美配合gevent了。

不了解那个_gevent_waiter,可以看看这篇文章 gevent hub 。

那么,我们怎么测试呢?测试过程比较简单,起一个单进程的 web服务,连接数据库的时候查询的时候,在数据库执行time.sleep 20秒,这个时候看其他请求这个 web服务还能处理请求不,用了waiter=_gevent_waiter完美啊。。。

有了这个,一个拥有大量数据库查询服务的系统,我可能再也不会用tornado了。。

原文:https://blog.csdn.net/qq_45476428/article/details/108693031

,

免责声明:本文仅代表文章作者的个人观点,与本站无关。其原创性、真实性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容文字的真实性、完整性和原创性本站不作任何保证或承诺,请读者仅作参考,并自行核实相关内容。文章投诉邮箱:anhduc.ph@yahoo.com

    分享
    投诉
    首页