mysqlclient和pymysql如何选择?_gevent_waiter的使用
使用python连接mysql,是需要三方包的,目前主流的方式就是pymysql 和 mysqlclient(也就是Python3版本的MySQLdb)。还有一个cymysql(fork of pymysql with optional C speedups)
1. 两个库的作者是同一个人INADA Naoki, pip库邮箱都指向mailto:songofacandy@gmail.com
2. PyMySQL的代码人员methane说mysqlclient速度更快及PyMySQL的应用场景
那么,我们应该如何选择呢?首先,需要了解下这两个包的大概。
一、pymysql
1)纯Python实现的,安装简单(直接pip安装)
2) 由于纯Python实现的,可以很好的跟gevent框架结合
二、mysqlclient
1)是一个C扩展模块,编译安装可能会导致报各种错误,明显没有pymysql方便
2)速度快;
对比上面,你就应该会清楚,pymysql的性能是比mysqlclient较差的,但是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吧。
强大的mysqlclient已经解决了,mysqlclient目前也是可以使用gevent了。直接上代码:
import MySQLdb
import gevent.hubdef _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了。。
github地址:
https://github.com/PyMySQL/mysqlclient-python
https://github.com/PyMySQL/PyMySQL/
目前pymysql和mysqlclient的各项指标对比:
https://python.libhunt.com/compare-mysqlclient-python-vs-pymysql
很寒心啊,,,大多程序猿还是比较怕麻烦,选择了简单易用但是性能较差的pymysql......pymysql比MySQLdb慢太多了,所以大项目感觉pymysql还是有点鸡肋啊,在此建议,使用MySQLdb。
mysqlclient和pymysql如何选择?_gevent_waiter的使用相关推荐
- Django报错:mysql ImproperlyConfigured: mysqlclient 1.3.13 or newer is required, you have 0.9.3的解决办法
环境 Windows 10 Django 3.0.7 pymysql 0.9.3 原因 因为用pymysql替换了默认的mysqlclient,Django官方推荐的数据库API driver是mys ...
- python使用mysqlclient替代MySQLdb
2019独角兽企业重金招聘Python工程师标准>>> 简介 mysqlclient是MySQLdb的fork版,增加了对python 3.x的支持和其它优化,推荐替代MySQLdb ...
- python - mysql接口包学习笔记
测试环境:win10 64X Python 3.10.0 Anaconda3 python - mysql接口包 使用python连接mysql,是需要三方包的,目前主流的方式就是pymysql 和 ...
- Django 框架 数据库操作
数据库与ORM 1 django默认支持sqlite,mysql, oracle,postgresql数据库. <1> sqlite django默认使用sqlite的数据库,默认 ...
- python 连接mysql 字符集_Python 操作 MySQL 字符集的问题
使用 Python 操作 MySQL 有不少库供我们选择,比如 MySQLdb.mysqlclient.PyMySQL.peewee 和 SQLAIchemy 等.我使用的是 mysql-connec ...
- hello~Django
Models 数据库的配置 1 django默认支持sqlite,mysql, oracle,postgresql数据库. <1> sqlite django默认使用sqlite ...
- day16- django
MVC和MTV模式 Django的MTV模式本质是各组件之间为了保持松耦合关系,Django的MTV分别代表: Model(模型):负责业务对象与数据库的对象(ORM) Template(模版):负责 ...
- 千锋Django学习笔记
千锋Django学习笔记 文章目录 千锋Django学习笔记 写在前面 1. MVC和MTV 2. Django简介 3. MTV简单流程 4. 和Model的简单对接 5. Model 6. Tem ...
- 学习 Python Django
学习 Python Django 学习 Django 1. 初识Django命令 (1). 基本命令 (2). 数据库相关命令 2. 初识Django项目 (1). 创建项目 (2). 启动项目 3. ...
- 自学Python第二十二天- Django框架(一)创建项目、APP、快速上手、请求和响应流程、模板、数据库操作
Django 框架是一个基于 python 的重量级的 web 开发框架,现今很多大公司大项目都是使用 Django 框架.采用了 MVC(model view controller) 的框架模式,p ...
最新文章
- 实证会计理论与因果推断13 线性模型概述
- python pandas库实现逻辑回归拟牛顿法求参数_python 牛顿法实现逻辑回归(Logistic Regression)...
- 通过shell例子来学习循环结构的语法
- aspectj xml
- 开发工具:Git和SVN有哪些差异,看完你就懂了?
- Tengine(Nginx)动静分离简要配置
- HTML通过java信息保存,如何使用java邮件API将HTML格式的数据保存为java邮件的主体?...
- python定义变量字符串_Python学习笔记二(变量和字符串)
- [Windows Server 2008] 404错误设置方法
- python的参数传递机制
- svn commit 问题 POST of '***/!svn/me' 403 forbidden
- 灵格斯怎么屏幕取词_灵格斯词霸怎么用?灵格斯词霸使用手册
- 魔兽怀旧服最新服务器人口,魔兽世界怀旧服人口普查2020年最新 最新11月怀旧服人口普查数据大全_蚕豆网新闻...
- matlab 数据正态性检验
- protobuf静态库隐藏符号的坑
- AR/VR/MR三者之间的区别和联系
- 网吧服务器系统机房图片,很多网吧看不到主机的秘密
- 科技业10大错误决定
- App Tamer for Mac v2.6 应用CPU使用率管理
- HyperMesh二次开发教程 - 前言