python - mysql接口包学习笔记
测试环境: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 速度更快。
那么,我们应该如何选择呢?首先,需要了解下这两个包。
pymysql
1)纯Python实现的,安装简单(直接pip安装)
2) 由于纯Python实现的,可以很好的跟gevent框架结合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发行版本,包含了conda、Python等190多个科学包及其依赖项。
Anaconda自带集成开发环境spyder。有些人不喜欢spyder的风格。个人感觉其提示功能也不及PyCharm。如果能将PyCharm配置anaconda环境,岂不美哉!接下来分享一下个人经验:
配置Anaconda环境变量,在系统环境变量Path添加Anacond的安装路径和其子文件夹script和library/bin。(注释,安装Anaconda时已经自动配置,无需手动配置)
为PyCharm配置anaconda环境。进入PyCharm,依次点击File->Default
Setting->Project Interpreter
点击齿轮选择Add Local
我是选择第三个。之前认为理所当然是第二个,然而搞了半天不知怎么办。点击第三个选项卡,将路径选为anaconda安装路径下的python.exe,确定后成功配置anaconda环境。
之后,在该环境下创建的工程就可以使用anaconda中已有的库了。
在测试一下,连接成功!!!
问题完美解决,原来是对Python开发工具和库不了解产生的误解,基础不牢还要继续学习!
python - mysql接口包学习笔记相关推荐
- python plt包_Python 数据可视化-Matplotlib包学习笔记(一)
Python 数据可视化 本文主要参照Matplotlib的官方教程进行整理,作为个人的学习笔记进行分享,欢迎相互讨论. Matplotlib包学习笔记(一) 本文主要简单介绍一下Matplotlib ...
- python测试自动化封装_python接口自动化学习笔记(封装获取测试数据方法)
本篇文章是接于python接口自动化学习笔记(封装方法用于读取excel) 后的拓展,讲解在封装完成excel的数据读取代码后,如何在data层进行使用 首先,我准备了这样一个excel表格用以存储测 ...
- python接口自动化学习笔记(封装获取测试数据方法)
本篇文章是接于python接口自动化学习笔记(封装方法用于读取excel) 后的拓展,讲解在封装完成excel的数据读取代码后,如何在data层进行使用 首先,我准备了这样一个excel表格用以存储测 ...
- Python快速编程入门#学习笔记01# |第一章 :Python基础知识 (Python发展历程、常见的开发工具、import模块导入)
全文目录 ==先导知识== 1 认识Python 1.1.1 Python的发展历程 1.1.2 Python语言的特点 2. Python解释器的安装与Python程序运行 1.2.1 安装Pyth ...
- python气象数据可视化学习笔记6——利用python地图库cnmaps绘制地图填色图并白化
文章目录 1. 效果图 2. cnmaps简介及安装 2.1 写在前面 2.2 cnmaps简介和安装 3. 导入库 4. 定义绘图函数 4.1 使用get_adm_maps返回地图边界 4.2 ax ...
- B站《一天学会 MySQL 数据库》学习笔记
B站<一天学会 MySQL 数据库>学习笔记 老司机带我飞 职场十字诀:思考.计划.行动.总结.反思 关注他 4 人赞同了该文章 登录和退出MySQL服务器 # 登录MySQL $ my ...
- 36篇博文带你学完opencv :python+opencv进阶版学习笔记目录
基础版学习笔记传送门 36篇博文带你学完opencv :python3+opencv学习笔记汇总目录(基础版) 进阶版笔记 项目 opencv进阶学习笔记1: 调用摄像头用法大全(打开摄像头,打开摄像 ...
- TS基础1(类型定义、接口)-学习笔记
文章目录 TS基础1(类型定义.接口)-学习笔记 什么是TS TS基础1(类型定义.接口)-学习笔记 什么是TS //ts用法var n:number = 10;let str:string = '1 ...
- mysql性能优化-学习笔记
mysql性能优化-学习笔记
最新文章
- WampServer安装环境
- native关键字(本地方法)、 java调用so动态链接库
- jq 比较两个时间是否在同一天_.NET CORE下最快比较两个文件内容是否相同的方法...
- http://www.od85c.com.cn/html/,OllyDbg script for unpacking Enigma 4.xx and 5.xx
- 图像处理中的卷积与模板
- Java怎样获取Content-Type的文件类型Mime Type
- VC 在对话框中增加菜单栏
- innodb 删除隐藏列_MySQL进阶之InnoDB事务原子性实现原理
- Scala语言会取代Java的吗?
- 听说 2022 年个税改革了,这是咋回事?
- 矩阵微分与向量函数Taylor展开
- 追踪算法MUSTer体验
- 向量旋转(或矢量旋转或坐标轴旋转)后xy坐标重定位(vivado+cordic ip核+matlab) - 适用于数学爱好者
- SQL SERVER 使用stuff函数进行分组且合并
- adb连接各种模拟器
- 首家优秀型厂商,百度智能云智能对话通过信通院权威评测!
- 互联网日报 | 华为明年至少招8000名应届生;完美日记母公司启动赴美上市;四川银行创立大会召开...
- python 爬虫 爬取当当网图书信息
- git将本地文件推到远程仓库
- 概率图模型学习笔记:HMM、MEMM、CRF