现在的招聘要求对QA人员的要求越来越高,测试的一些基础知识就不必说了,来说测试知识以外的,会不会一门或者多门开发与语言,能不能读懂代码,会不会Linux,会不会搭建测试系统,会不会常用的数据库,会不会SQL等等,因此我们这篇文章来讲解如何用
python语言操作mysql数据库。
本科阶段曾学过使用java对MySQL数据库进行操作,基本思路是先连接数据库,然后执行SQL语句对数据库进行操作,最后打印结果并断开连接。使用Python操作数据库的流程和以上过程基本一致,在对其进行介绍之前,先介绍一些基本的概念。
B站讲的最详细的Python接口自动化测试实战教程全集(实战最新版)_哔哩哔哩_bilibiliB站讲的最详细的Python接口自动化测试实战教程全集(实战最新版)共计200条视频,包括:1、接口自动化之为什么要做接口自动化、2、接口自动化之request全局观、3、接口自动化之接口实战等,UP主更多精彩视频,请关注UP账号。https://www.bilibili.com/video/BV17p4y1B77x/?spm_id_from=333.337.search-card.all.click
1、python操作数据库的流程
以流程图的方式展示python操作MySQL数据库的流程:
对上图的解读:首先检查是否依次创建Connection对象(数据库连接对象)用于打开数据库连接,创建Cursor对象(游标对象)用于执行查询和获取结果;然后执行SQL语句对数据库进行增删改查等操作并提交事务,此过程如果出现异常则使用回滚技术使数据库恢
复到执行SQL语句之前的状态;最后,依次销毁Cursor对象和Connection对象,以避免多计算机内存过多的占用和浪费。
下面依次对Connection对象、Cursor对象和事务等概念进行介绍。
Connection对象即为数据库连接对象,在python中可以使用pymysql.connect()方法创建Connection对象,该方法的常用参数如下:
host:连接的数据库服务器主机名,默认为本地主机(localhost);字符串类型(String)
user:用户名,默认为当前用户;字符串类型(String) 。
passwd:密码,无默认值;字符串类 (String)。
db:数据库名称,无默认值;字符串类型(String) 。
port:指定数据库服务器的连接端口,默认为3306;整型(int)。
charset:连接字符集;字符串类型(String)
Connection对象常用的方法如下:
cursor():使用当前连接创建并返回游标 。
commit():提交当前事务 。
rollback():回滚当前事务 。
close():关闭当前连接
Cursor对象即为游标对象,用于执行查询和获取结果,在python中可以使用conn.cursor()创建,conn为Connection对象。Cursor对象常用的方法和属性如下:
execute():执行数据库查询或命令,将结果从数据库获取到客户端 fetchone():获取结果集的下一行 fetchmany():获取结果集的下几行 fetchall():获取结果集中剩下的所有行 close():关闭当前游标对象 rowcount:最近一次的execute返回数据的行数或受影响的行数
1、事务机制可以确保数据一致性。
事务是数据库理论中一个比较重要的概念,指访问和更新数据库的一个程序执行单元,具有ACID特性:
在开发时,我们以以下三种方式使用事务:
正常结束事务:conn.commit() 异常结束事务:conn.rollback() 关闭自动commit:设置 conn.autocommit(False)
2 、使用python实现对MySQL数据库的增删改查等操作
在python中操作MySQL数据库时,要使用的模块是:
Python2中:mysqldb(pip2 install mysqldb) Python3中:pymysql(pip3 install pymysql)
本篇博客所使用的环境为:
python 3.7 win 10 pycharm 2018.3.5 pymysql 0.9.2 mysql 5.6
下面将以具体代码的形式依次介绍python中如何实现对MySQL数据库的增删改查等操作。
Python 标准数据库接口为 Python DB-API,Python DB-API为开发人员提供了数据库应用编程接口。
Python 数据库接口支持非常多的数据库,你可以选择适合你项目的数据库:
你可以访问Python数据库接口及API查看详细的支持数据库列表。
不同的数据库你需要下载不同的DB API模块,例如你需要访问Oracle数据库和Mysql数据,你需要下载Oracle和MySQL数据库模块。
DB-API 是一个规范. 它定义了一系列必须的对象和数据库存取方式, 以便为各种各样的底层数据库系统和多种多样的数据库接口程序提供一致的访问接口 。
Python的DB-API,为大多数的数据库实现了接口,使用它连接各数据库后,就可以用相同的方式操作各数据库。
PyMySQL 是在 Python3.x 版本中用于连接 MySQL 服务器的一个库,Python2中则使用mysqldb。
PyMySQL 遵循 Python 数据库 API v2.0 规范,并包含了 pure-Python MySQL 客户端库。
在使用 PyMySQL 之前,我们需要确保 PyMySQL 已安装。
PyMySQL 下载地址:
https://github.com/PyMySQL/PyMySQL。
如果还未安装,我们可以使用以下命令安装最新版的 PyMySQL:
pip install PyMySQL
如果你的系统不支持 pip 命令,可以使用以下方式安装:
1、使用 git 命令下载安装包安装(你也可以手动下载):
git clone https://github.com/PyMySQL/PyMySQL
cd PyMySQL/
python3 setup.py install
2、如果需要制定版本号,可以使用 curl 命令来安装:
# X.X 为 PyMySQL 的版本号
url -L https://github.com/PyMySQL/PyMySQL/tarball/pymysql-X.X | tar xz
cd PyMySQL*
python3 setup.py install
# 现在你可以删除 PyMySQL* 目录
注意:请确保您有root权限来安装上述模块。
安装的过程中可能会出现"ImportError: No module named setuptools"的错误提示,意思是你没有安装setuptools,你可以访问
https://pypi.python.org/pypi/setuptools 找到各个系统的安装方法。
Linux 系统安装实例:
$ wget https://bootstrap.pypa.io/ez_setup.py
$ python3 ez_setup.py
连接数据库前,请先确认以下事项:
1、查看有没有创建数据库TESTDB(测试数据库),打开MySQL的client界面输入密码 后,输入命令:
show databases;
2、看到没有那个数据库,那我们就开始创建一个TESTDB数据库,输入命令:
create database TESTDB;
3、再次输入第一步的命令查看,看到已经成功创建
4、查看TESTDB数据库里,有没有EMPLOYEE(测试用的测试表),输入命令:
use testdb;
show tables;
5、查看到在TESTDB数据库中没有EMPLOYEE表,那么没有我们就创建一张EMPLOYEE表即可。
创建一个实例
运行结果:(从结果中我们可以看见成功创建了一个Connection和Cursor对象。)
1、连接数据库
运行结果:
参考代码:
# coding=utf-8
# 1.先设置编码,utf-8可支持中英文,如上,一般放在第一行
# 2.注释:包括记录创建时间,创建人,项目名称。
'''
Created on 2019-5-22
Project:学习和使用python操作MySQL数据库
9 '''
# 3.导入模块
import pymysql
import pymysql
# 打开数据库连接
conn = pymysql.connect('localhost', 'root', 'root', 'testdb')
# 使用cursor()方法创建一个游标对象
cursor = conn.cursor()
# 使用execute()方法执行SQL查询
cursor.execute('SELECT VERSION()')
# 使用fetchone()方法获取单条数据
data = cursor.fetchone()
# 打印
print('database version: %s' % data)
# 关闭数据库连接
conn.close()
2、创建数据库表
如果数据库连接存在我们可以使用execute()方法来为数据库创建表,如下所示创建表EMPLOYEE:
运行代码后查看有没有表创建,输入命令:
use TESTDB;
show tables;
运行结果:
# coding=utf-8
# 1.先设置编码,utf-8可支持中英文,如上,一般放在第一行
# 2.注释:包括记录创建时间,创建人,项目名称。
'''
Created on 2019-5-22
Project:学习和使用python操作MySQL数据库
'''
# 3.导入模块
import pymysql
import pymysql
# 打开数据库连接
conn = pymysql.connect('localhost', 'root', 'root', 'testdb')
# 使用cursor()方法创建一个游标对象cursor
cursor = conn.cursor() # 游标对象用于执行查询和获取结果
# 使用execute()方法执行SQL,如果表存在则将其删除
cursor.execute('DROP TABLE IF EXISTS EMPLOYEE')
# 使用预处理语句创建表
sql = """CREATE TABLE `employee` (
`first_name` varchar(255) DEFAULT NULL COMMENT '姓',
`last_name` varchar(255) DEFAULT NULL COMMENT '名',
`age` int(11) DEFAULT NULL COMMENT '年龄',
`sex` varchar(255) DEFAULT NULL COMMENT '性别',
`income` varchar(255) DEFAULT NULL COMMENT '收入'
ENGINE=InnoDB DEFAULT CHARSET=utf8;
"""
# 执行SQL语句
cursor.execute(sql)
# 关闭数据库连接
conn.close()
以下实例使用执行 SQL INSERT 语句向表 EMPLOYEE 插入记录:
1、首先查询有没有记录输入查询语句:
select * from employee;
2、代码实现
运行结果:
再次查看有没有记录,输入第一步的sql语句:(可以看到插入一条记录)
# coding=utf-8
# 1.先设置编码,utf-8可支持中英文,如上,一般放在第一行
# 2.注释:包括记录创建时间,创建人,项目名称。
'''
Created on 2019-5-22
@author: 北京-宏哥
Project:学习和使用python操作MySQL数据库
'''
# 3.导入模块
import pymysql
import pymysql
# 打开数据库连接
conn = pymysql.connect('localhost', 'root', 'root', 'testdb')
# 使用cursor()方法获取操作游标
cursor = conn.cursor()
# SQL语句:向数据表中插入数据
sql = """INSERT INTO EMPLOYEE(FIRST_NAME,
LAST_NAME, AGE, SEX, INCOME)
VALUES ('Mac', 'Mohan', 20, 'M', 2000)"""
# 异常处理
try:
# 执行SQL语句
cursor.execute(sql)
# 提交事务到数据库执行
conn.commit() # 事务是访问和更新数据库的一个程序执行单元
except:
# 如果发生错误则执行回滚操作
conn.rollback()
# 关闭数据库连接
另一种写法:
# coding=utf-8
# 1.先设置编码,utf-8可支持中英文,如上,一般放在第一行
# 2.注释:包括记录创建时间,创建人,项目名称。
'''
Created on 2019-5-22
@author: 北京-宏哥
Project:学习和使用python操作MySQL数据库
'''
# 3.导入模块
import pymysql
import pymysql
# 打开数据库连接
conn = pymysql.connect('localhost', 'root', 'root', 'testdb')
# 使用cursor()方法获取操作游标
cursor = conn.cursor()
# SQL语句:向数据表中插入数据
sql = "INSERT INTO EMPLOYEE(FIRST_NAME, \
LAST_NAME, AGE, SEX, INCOME) \
VALUES ('%s', '%s', %s, '%s', %s)" % \
('Mac', 'Mohan', 20, 'M', 2000)
# 异常处理
try:
# 执行SQL语句
cursor.execute(sql)
# 提交事务到数据库执行
conn.commit() # 事务是访问和更新数据库的一个程序执行单元
except:
# 如果发生错误则执行回滚操作
conn.rollback()
# 关闭数据库连接
conn.close()
以下代码使用变量向SQL语句中传递参数:
1 ..................................
2 user_id = "root"
3 password = "root"
4
5 con.execute('insert into Login values( %s, %s)' % \
6 (user_id, password))
7 ..................................
Python查询Mysql使用 fetchone() 方法获取单条数据, 使用fetchall() 方法获取多条数据。
查询EMPLOYEE表中salary(工资)字段大于1000的所有数据: