网站首页 > 编程文章 正文
一、三者的异同
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
如果一直安装失败,试试通过自己下载mysqlclient 的wheel文件:
https://www.lfd.uci.edu/~gohlke/pythonlibs/#mysqlclient
mysqlclient-1.4.6 是版本号
cp36、cp37是python的版本
win32、win_amd64是windows版本
下载完,打开cmd(win+R,输入cmd,回车)切换到对应的路径:
- windows系统
如果是C盘,直接用以下命令:
cd [文件路径]
在其他盘,需要多一步切换盘符,假设是D盘,在cmd先输入d: ,回车,切换到D盘之后再用【cd [文件路径]】,注意:cd和路径间有一个空格。
- 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的,直接下载最后一个源包)
2.2 安装pymysql
打开cmd,或终端 直接pip install pymysql 即可,如果安装不了,到官方下载库进行安装:
pymysql官方下载链接:https://pypi.org/project/PyMySQL/#files
三、测试:_gevent_waiter
其实,
强大的mysqlclient已经解决了,mysqlclient目前也是可以使用gevent了。直接上代码:
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,
上面的连接方式,其他参数不多解释了,就说waiter吧,有了这个相当于mysqlclinet可以完美配合gevent了。
不了解那个_gevent_waiter,可以看看这篇文章 gevent hub 。
那么,我们怎么测试呢?测试过程比较简单,起一个单进程的 web服务,连接数据库的时候查询的时候,在数据库执行time.sleep 20秒,这个时候看其他请求这个 web服务还能处理请求不,用了waiter=_gevent_waiter完美啊。。。
有了这个,一个拥有大量数据库查询服务的系统,我可能再也不会用tornado了。。
猜你喜欢
- 2024-10-23 Ubuntu环境下MySQL卸载安装配置远程访问三步曲
- 2024-10-23 ubuntu 22 下qt5.15编译mysql驱动
- 2024-10-23 django开发笔记及如何利用pycharm发布到阿里云
- 2024-10-23 Cowrie蜜罐部署教程(蜜罐一般部署在哪里)
- 2024-10-23 PHP 编程中最常见的错误,你犯过几个?
- 2024-10-23 「人脸识别实战一」系统架构设计(人脸识别架构图)
- 2024-10-23 ubuntu20.04 安装配置slurm-安装配置数据库
- 2024-10-23 Python 操作 MySQL 的5种方式(python连接mysql数据库增删改查)
- 2024-10-23 使用Ansible安装MySQL(ansible安装kubernetes)
- 2024-10-23 在ubuntu 16.04上安装和简单配置MySQL(5.7版本)
你 发表评论:
欢迎- 06-24一个老爸画了超级有爱的365幅画 | 父亲节献礼
- 06-24产品小白看魏则西事件——用产品思维审视百度推广
- 06-24某教程学习笔记(一):13、脚本木马原理
- 06-24十大常见web漏洞——命令执行漏洞
- 06-24初涉内网,提权那些事(内网渗透提权)
- 06-24黑客命令第16集:47种最常见的**网站方法2/2
- 06-24铭说 | 一句话木马的多种变形方式
- 06-24Java隐藏的10倍效率技巧!90%程序员不知道的魔法方法(附代码)
- 最近发表
- 标签列表
-
- spire.doc (70)
- instanceclient (62)
- solidworks (78)
- system.data.oracleclient (61)
- 按键小精灵源码提取 (66)
- pyqt5designer教程 (65)
- 联想刷bios工具 (66)
- c#源码 (64)
- graphics.h头文件 (62)
- mysqldump下载 (66)
- libmp3lame (60)
- maven3.3.9 (63)
- 二调符号库 (57)
- git.exe下载 (68)
- diskgenius_winpe (72)
- pythoncrc16 (57)
- solidworks宏文件下载 (59)
- qt帮助文档中文版 (73)
- satacontroller (66)
- hgcad (64)
- bootimg.exe (69)
- android-gif-drawable (62)
- axure9元件库免费下载 (57)
- libmysqlclient.so.18 (58)
- springbootdemo (64)
本文暂时没有评论,来添加一个吧(●'◡'●)