测试环境:win10 64X
Python 3.10.0
Anaconda3

python - mysql接口包

使用python连接mysql,是需要三方包的,目前主流的方式就是pymysql 和 mysqlclient(也就是Python3版本的MySQLdb)。还有一个cymysql(fork of pymysql with optional C speedups)

提示:mysql-Python是Python2版本,它实现了Python数据库API规范V2.0,基于MySql C API上建立的。只支持Python2版本,不支持Python3版本,下面不予讨论。

那么如何选择接口包呢

首先了解一下pymysql 和 mysqlclient这两个库。
pymysql 和 mysqlclient这两个库的作者是同一个人INADA Naoki, pip库邮箱都指向mailto:songofacandy@gmail.com 。
PyMySQL的代码人员methane说mysqlclient比pymysql 速度更快。

那么,我们应该如何选择呢?首先,需要了解下这两个包。

  1. pymysql

    1)纯Python实现的,安装简单(直接pip安装)
    2) 由于纯Python实现的,可以很好的跟gevent框架结合

  2. mysqlclient

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

对比上面,你就应该会清楚,pymysql的性能是比mysqlclient较差的,但是pymysql简单易使用。
当出现以下以下三种情况时采用pymysql:
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     #### 特别注意,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了。。
大多程序猿还是比较怕麻烦,选择了简单易用但是性能较差的pymysql…pymysql比MySQLdb慢太多了,所以大项目感觉pymysql还是有点鸡肋啊,在此建议,使用MySQLdb

初次MySQLdb安装(没经验)

// 命令提示符输入指令
pip install mysqlclient

安装后,查询可知

安装验证方法:

测试非常简单,检查MySQLdb(注意大小写)模块是否可以正常导入。

测试中发现一个有趣的现象:
使用命令提示符(DOS)是正常的,如下图:

使用IDLE却有问题,如下图:

再试一下Pycharm,也是不行的,如下图:

验证失败,继续找原因

从PyCharm着手,搜索到一位高手的解决方法。原文如下:

在学习Python的过程中,需要连接MySQL数据库。在shell命令模式下导入“import MySQLdb”,运行OK。
但在PyCharm中,执行代码总是出错,从网上搜集了解决的方法如下:pycharm 里, project interpreter 里面没有 MySQLdb 。直接 import MySQLdb ,报错如下:
import MySQLdb
ImportError: No module named 'MySQLdb' 解决办法:
pycharm 的 File->default settings->project Interpreter 的 package 里面有没有 mysql 的 package,选择了一个2.7的包就正常了。

依此方法执行,Pycharm仍然报错。内容如下:

错误提示
ERROR: Could not find a version that satisfies the requirement MySQLdb (from versions: none)
ERROR: No matching distribution found for MySQLdb
WARNING: You are using pip version 21.3.1; however, version 22.0.4 is available.
You should consider upgrading via the 'D:\Python_X64\test1\venv\Scripts\python.exe -m pip install --upgrade pip' command.

提示让升级pip程序。在命令提示符中进行操作,如下图:

可以看到第一次 pip install --upgrade pip 操作失败了。不过提示Consider using the --user option or check the permissions.

如下进行第二次操作pip install --user --upgrade pip,安装成功了。

pip install --user package_name

查了一下pip --user参数,将Python 程序包安装到 $HOME/.local 路径下,其中包含三个字文件夹:bin,lib 和 share。
然后修改 .bash_profile 文件使得 H O M E / . l o c a l / b i n 目 录 下 的 程 序 加 入 到 环 境 变 量 中 e x p o r t P A T H = HOME/.local/bin 目录下的程序加入到环境变量中 export PATH= HOME/.local/bin目录下的程序加入到环境变量中exportPATH=HOME/.local/bin:$PATH

我理解为,这样就躲开了拒绝访问的问题。

pip升级问题解决了,但是MySQLdb还是无法使用。有点郁闷…

问题慢慢明了起来,应该是调用错了库。我的电脑上同时安装了Python3和Anaconda3。

同时安装Python3和Anaconda3,安装的第三方库会放在哪里?

在命令提示符中输入指令where pip 指令,就能看出来

原来有2套pip指令,有2套库存储位置。Python3和Anaconda3还有点模糊,可以在下一篇详细记录一下。

原来之前执行的pip install mysqlclient指令,一直是Anaconda3中的pip指令。

知道原因就好办了,在pycharm中设置一下应该就可以解决

网上搜索高手的解决方法:PyCharm配置anaconda环境步骤如下:

PyCharm是一款很好用很流行的python编辑器。Anaconda是专注于数据分析的Python发行版本,包含了condaPython等190多个科学包及其依赖项。

Anaconda通过管理工具包、开发环境、Python版本,大大简化了你的工作流程。不仅可以方便地安装、更新、卸载工具包,而且安装时能自动安装相应的依赖包,同时还能使用不同的虚拟环境隔离不同要求的项目。

Anaconda自带集成开发环境spyder。有些人不喜欢spyder的风格。个人感觉其提示功能也不及PyCharm。如果能将PyCharm配置anaconda环境,岂不美哉!接下来分享一下个人经验:

安装anaconda和pycharm再完成两者的安装之后:

  1. 配置Anaconda环境变量,在系统环境变量Path添加Anacond的安装路径和其子文件夹script和library/bin。(注释,安装Anaconda时已经自动配置,无需手动配置)

  2. 为PyCharm配置anaconda环境。进入PyCharm,依次点击File->Default
    Setting->Project Interpreter


    点击齿轮选择Add Local

    我是选择第三个。之前认为理所当然是第二个,然而搞了半天不知怎么办。点击第三个选项卡,将路径选为anaconda安装路径下的python.exe,确定后成功配置anaconda环境。

之后,在该环境下创建的工程就可以使用anaconda中已有的库了。

在测试一下,连接成功!!!

问题完美解决,原来是对Python开发工具和库不了解产生的误解,基础不牢还要继续学习!

python - mysql接口包学习笔记相关推荐

  1. python plt包_Python 数据可视化-Matplotlib包学习笔记(一)

    Python 数据可视化 本文主要参照Matplotlib的官方教程进行整理,作为个人的学习笔记进行分享,欢迎相互讨论. Matplotlib包学习笔记(一) 本文主要简单介绍一下Matplotlib ...

  2. python测试自动化封装_python接口自动化学习笔记(封装获取测试数据方法)

    本篇文章是接于python接口自动化学习笔记(封装方法用于读取excel) 后的拓展,讲解在封装完成excel的数据读取代码后,如何在data层进行使用 首先,我准备了这样一个excel表格用以存储测 ...

  3. python接口自动化学习笔记(封装获取测试数据方法)

    本篇文章是接于python接口自动化学习笔记(封装方法用于读取excel) 后的拓展,讲解在封装完成excel的数据读取代码后,如何在data层进行使用 首先,我准备了这样一个excel表格用以存储测 ...

  4. Python快速编程入门#学习笔记01# |第一章 :Python基础知识 (Python发展历程、常见的开发工具、import模块导入)

    全文目录 ==先导知识== 1 认识Python 1.1.1 Python的发展历程 1.1.2 Python语言的特点 2. Python解释器的安装与Python程序运行 1.2.1 安装Pyth ...

  5. python气象数据可视化学习笔记6——利用python地图库cnmaps绘制地图填色图并白化

    文章目录 1. 效果图 2. cnmaps简介及安装 2.1 写在前面 2.2 cnmaps简介和安装 3. 导入库 4. 定义绘图函数 4.1 使用get_adm_maps返回地图边界 4.2 ax ...

  6. B站《一天学会 MySQL 数据库》学习笔记

    B站<一天学会 MySQL 数据库>学习笔记 老司机带我飞 职场十字诀:思考.计划.行动.总结.反思 ​关注他 4 人赞同了该文章 登录和退出MySQL服务器 # 登录MySQL $ my ...

  7. 36篇博文带你学完opencv :python+opencv进阶版学习笔记目录

    基础版学习笔记传送门 36篇博文带你学完opencv :python3+opencv学习笔记汇总目录(基础版) 进阶版笔记 项目 opencv进阶学习笔记1: 调用摄像头用法大全(打开摄像头,打开摄像 ...

  8. TS基础1(类型定义、接口)-学习笔记

    文章目录 TS基础1(类型定义.接口)-学习笔记 什么是TS TS基础1(类型定义.接口)-学习笔记 什么是TS //ts用法var n:number = 10;let str:string = '1 ...

  9. mysql性能优化-学习笔记

    mysql性能优化-学习笔记

最新文章

  1. WampServer安装环境
  2. native关键字(本地方法)、 java调用so动态链接库
  3. jq 比较两个时间是否在同一天_.NET CORE下最快比较两个文件内容是否相同的方法...
  4. http://www.od85c.com.cn/html/,OllyDbg script for unpacking Enigma 4.xx and 5.xx
  5. 图像处理中的卷积与模板
  6. Java怎样获取Content-Type的文件类型Mime Type
  7. VC 在对话框中增加菜单栏
  8. innodb 删除隐藏列_MySQL进阶之InnoDB事务原子性实现原理
  9. Scala语言会取代Java的吗?
  10. 听说 2022 年个税改革了,这是咋回事?
  11. 矩阵微分与向量函数Taylor展开
  12. 追踪算法MUSTer体验
  13. 向量旋转(或矢量旋转或坐标轴旋转)后xy坐标重定位(vivado+cordic ip核+matlab) - 适用于数学爱好者
  14. SQL SERVER 使用stuff函数进行分组且合并
  15. adb连接各种模拟器
  16. 首家优秀型厂商,百度智能云智能对话通过信通院权威评测!
  17. 互联网日报 | 华为明年至少招8000名应届生;完美日记母公司启动赴美上市;四川银行创立大会召开...
  18. python 爬虫 爬取当当网图书信息
  19. git将本地文件推到远程仓库
  20. 概率图模型学习笔记:HMM、MEMM、CRF

热门文章

  1. ds5 debug arm64 模拟器
  2. Hadoop教程免费视频 小象《Hadoop 2.X大数据平台V3》
  3. 关于DCDC模块电源滤波的问题 (输出正负±5V)及X,Y安规电容区别
  4. ews-java-api-2.0 访问SSL异常
  5. 笛卡尔积算法的sku
  6. Python+Selenium,让浏览器自动帮你下文献
  7. idea 文件夹样式更改插件地址
  8. java 基本微信小程序的心理咨询服务系统 uniapp 小程序
  9. HeidiSQL使用心得
  10. 去掉Office中的保存到百度网盘