专栏首页itsoeasymysql客户端pymysql在python下性能比较
原创

mysql客户端pymysql在python下性能比较

背景

python下mysql的客户端主流有三个pymysql, mysqldb 和 mysql connector。很多人在选择客户端时,没有什么要求,都是按照前人或者经验主义选择,但是有真的研究他们之间的性能差别,以及是否符合你的项目需要,或者遇到性能瓶颈时,是否了解他们之间的差别。

本文将从2个维度来分析他们的性能,一个是直接使用,另一个是使用orm辅助使用,来对比三个的性能差别。

介绍

mysql的python客户端目前市场主流有三个,分别是 mysqldb (mysqlclient), mysql connector python 和 pymysql。

mysqldb (mysqlclient) 是mysql官方推出基于C库来写mysql连接库,非纯python。之前mysqldb只支持python2,后面mysqlclient在mysqldb的基础上fork来支持python3。

mysql connector for python 是mysql官方推出的纯python实现的连接库。

pymysql 是纯python写的主流连接库。

环境

  • host: centos 7.2 4核8G内存
  • mysql version: 5.6.43
  • python version: 3.6.6
  • pymysql: 0.9.3
  • mysqlclient: 1.4.2.post1
  • mysql-connector-python: 8.0.15
  • mysqlalchemy: 1.2.18
  • 测试数据库: mysql 提供的 sakila

测试

查询库表返回 100 条记录

SELECT payment_id,customer_id,staff_id FROM payment where payment_id between 1 and 100 limit 100

非ORM操作

测试方法

重复操作100次

测试结果

connector:0.023178300936706364
pymysql:0.023064655950292945
mysqlclient:0.014133377000689507

测试结论

mysqlclient 效果比其他两个快近100%, 毕竟是依赖c的库,性能是有保障的,connector跟pymysql的就不分上下很接近。

ORM操作

测试方法

重复操作100次

测试结果

connector:0.10195669997483492
pymysql:0.18848947307560593
mysqlclient:0.18876364000607282

测试结论

发现connector比其他两个快将近80%多,其余两个效果也很接近。但是这里会发现使用ORM会整体慢1个数据级。

结论

如果是追求极致性能,建议使用mysqlclient,如果想使用ORM,建议使用mysql connector for python, 后面附带源码。

源码下载

https://github.com/roger777luo/msyql_client_bench.git

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 在windows下如何新建爬虫虚拟环境和进行scrapy安装

    Scrapy是Python开发的一个快速、高层次的屏幕抓取和web抓取框架,用于抓取web站点并从页面中提取结构化的数据。Scrapy吸引人的地方在于它是一个框...

    Python进阶者
  • 一篇文章教会你理解Scrapy网络爬虫框架的工作原理和数据采集过程

    Scrapy是一个使用Python编程语言编写的爬虫框架,任何人都可以根据自己的需求进行修改,并且使用起来非常的方便。它可以应用在数据采集、数据挖掘、网络异常用...

    Python进阶者
  • 使用Scratch2和ROS进行机器人图形化编程学习

    Scratch是一款由麻省理工学院(MIT)设计开发的少儿编程工具,Python是近年来非常流行的机器人和人工智能编程语言,ROS是机器人操作系统。

    zhangrelay
  • LeetCode 961. N-Repeated Element in Size 2N Array

    In a array A of size 2N, there are N+1 unique elements, and exactly one of these...

    Angel_Kitty
  • salt-api https证书报错解决方法

    Python 升级到 2.7.9 之后引入了一个新特性,当使用urllib.urlopen打开一个 https 链接时,会验证一次 SSL 证书。\ 而当目...

    明哥的运维笔记
  • linux 文件编码格式转换

    师兄在 windows 下写的一段程序 (C/C++ 编写), 传给我在 Linux 下面运行, 编译和运行的时候输出的时候中文乱码了

    明哥的运维笔记
  • Tello无人机的使用笔记之dji-sdk/Tello-Python

    该脚本将自动向Tello发送命令。 收到上一个命令的回复后,将立即发送下一个命令。

    zhangrelay
  • Confluence 6 使用 Fail2Ban 来限制登录尝试

    我们需要在我们网站中防止密码的暴利破解。Fail2Ban 是一个 Python 的应用来查看日志文件,使用的是正则表达式,同时还可以与Shorewall (或者...

    HoneyMoose
  • Windows下安装Scrapy方法及常见安装问题总结——Scrapy安装教程

    这几天,很多朋友在群里问Scrapy安装的问题,其实问题方面都差不多,今天小编给大家整理一下Scrapy的安装教程,希望日后其他的小伙伴在安装的时候不再六神无主...

    Python进阶者
  • PHP基础——字符串的常用操作

    在PHP中使用trim()函数去除字符串左右的空格和特殊字符,使用rtrim()函数去除字符串右侧的空格和特殊字符,使用ltrim()函数去除字符串左侧的空格和...

    zhaozhiyong

扫码关注云+社区

领取腾讯云代金券