使用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的使用相关推荐

  1. 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 ...

  2. python使用mysqlclient替代MySQLdb

    2019独角兽企业重金招聘Python工程师标准>>> 简介 mysqlclient是MySQLdb的fork版,增加了对python 3.x的支持和其它优化,推荐替代MySQLdb ...

  3. python - mysql接口包学习笔记

    测试环境:win10 64X Python 3.10.0 Anaconda3 python - mysql接口包 使用python连接mysql,是需要三方包的,目前主流的方式就是pymysql 和 ...

  4. Django 框架 数据库操作

    数据库与ORM 1    django默认支持sqlite,mysql, oracle,postgresql数据库.  <1> sqlite django默认使用sqlite的数据库,默认 ...

  5. python 连接mysql 字符集_Python 操作 MySQL 字符集的问题

    使用 Python 操作 MySQL 有不少库供我们选择,比如 MySQLdb.mysqlclient.PyMySQL.peewee 和 SQLAIchemy 等.我使用的是 mysql-connec ...

  6. hello~Django

    Models 数据库的配置 1      django默认支持sqlite,mysql, oracle,postgresql数据库. <1> sqlite django默认使用sqlite ...

  7. day16- django

    MVC和MTV模式 Django的MTV模式本质是各组件之间为了保持松耦合关系,Django的MTV分别代表: Model(模型):负责业务对象与数据库的对象(ORM) Template(模版):负责 ...

  8. 千锋Django学习笔记

    千锋Django学习笔记 文章目录 千锋Django学习笔记 写在前面 1. MVC和MTV 2. Django简介 3. MTV简单流程 4. 和Model的简单对接 5. Model 6. Tem ...

  9. 学习 Python Django

    学习 Python Django 学习 Django 1. 初识Django命令 (1). 基本命令 (2). 数据库相关命令 2. 初识Django项目 (1). 创建项目 (2). 启动项目 3. ...

  10. 自学Python第二十二天- Django框架(一)创建项目、APP、快速上手、请求和响应流程、模板、数据库操作

    Django 框架是一个基于 python 的重量级的 web 开发框架,现今很多大公司大项目都是使用 Django 框架.采用了 MVC(model view controller) 的框架模式,p ...

最新文章

  1. 实证会计理论与因果推断13 线性模型概述
  2. python pandas库实现逻辑回归拟牛顿法求参数_python 牛顿法实现逻辑回归(Logistic Regression)...
  3. 通过shell例子来学习循环结构的语法
  4. aspectj xml
  5. 开发工具:Git和SVN有哪些差异,看完你就懂了?
  6. Tengine(Nginx)动静分离简要配置
  7. HTML通过java信息保存,如何使用java邮件API将HTML格式的数据保存为java邮件的主体?...
  8. python定义变量字符串_Python学习笔记二(变量和字符串)
  9. [Windows Server 2008] 404错误设置方法
  10. python的参数传递机制
  11. svn commit 问题 POST of '***/!svn/me' 403 forbidden
  12. 灵格斯怎么屏幕取词_灵格斯词霸怎么用?灵格斯词霸使用手册
  13. 魔兽怀旧服最新服务器人口,魔兽世界怀旧服人口普查2020年最新 最新11月怀旧服人口普查数据大全_蚕豆网新闻...
  14. matlab 数据正态性检验
  15. protobuf静态库隐藏符号的坑
  16. AR/VR/MR三者之间的区别和联系
  17. 网吧服务器系统机房图片,很多网吧看不到主机的秘密
  18. 科技业10大错误决定
  19. App Tamer for Mac v2.6 应用CPU使用率管理
  20. HyperMesh二次开发教程 - 前言

热门文章

  1. 微信小程序全方位深度解析课程Dome-First项目module
  2. 这个计算机到底是咋入门的(1.0)胡学友修改版
  3. 外汇交易提醒 ,美元升势停不下来?
  4. 如果可能,与孤独为友!
  5. python之股票数据分析
  6. 基于Elastic Search的搜索广告召回方案
  7. 我的冷笑话20100125
  8. 1. ARMv9-A Overview
  9. 如何将BMP文件转换为JPG文件
  10. 基于阿里DDNS的ipv6 for windows版软件