1:为什么要连接数据库呢?
做接口自动化测试的时候,我们需要校验数据是否正常入库,数据是否正确,来做断言处理;有的时候需要修改数据,去执行其他场景的测试用例;有的时候需要删除数据,从而实现同一个数据多次使用。
例如:注册了一个新用户,产生了多余的数据,下次同一个账号就无法注册了,这种情况怎么办呢?自动化测试都有数据准备和数据清理的操作,如果因此用例产生了多余数据,就需要清理数据,可以用Pyhthon连接Mysql直接删除多余的数据就可以了。
2:python连接Mysql的模块安装
第一种方法:在线安装
在Pycharm---点击--Terminal---输入pip install PyMySQL等待完装完毕即可,如图所示
第二种方法:离线安装
有时候在线安装第三方模块的时,会因为网络原因总是装不上,那怎么办呢?那就手动安装
参考这个网址:python——pymysql的安装 - 走看看
3:开始连接MySql
创建游标,使数据以字典的形式返回
# 使用 cursor() 方法创建一个游标对象 cursor,默认返回元素数据类型
cursor = db.cursor()
# 添加cursor参数,指定返回字典数据类型
cursor = db.cursor(cursor=pymysql.cursors.DictCursor)
import pymysql
# 打开数据库连接
db = pymysql.connect(host="127.0.0.1", port=3306, user="root", password="123456", database="user_test")
"""
host:地址,你的数据库地址
port:端口号
user:用户名
password:密码
database:要操作的数据库
"""
# 使用 cursor() 方法创建一个游标对象 cursor,默认返回元素数据类型
cursor = db.cursor()
# 添加cursor参数,指定返回字典数据类型
cursor = db.cursor(cursor=pymysql.cursors.DictCursor)
# 使用 execute() 方法执行 SQL 查询
cursor.execute("select * from studys")
# 使用 fetchone() 方法获取单条数据.
data = cursor.fetchone()
# 输出data数据
print(data)
# 关闭数据库连接
db.close()
4:查询数据
写查询语句,查询一行数据,查询多行数据
语法:
select 列名称 from 表名称 [查询条件]
# 查询表里所有内容
select * from studys
例如要查询 students 表中所有学生的名字和年龄, 输入语句
select name, age from studys
fetchone()获取一行数据
fetchall()获取所有数据
查询一行语句
# 导入模块
import pymysql
# 打开数据库连接
db = pymysql.connect("127.0.0.1", "root", "123456", "user_test")
# 使用 cursor() 方法创建一个游标对象 cursor
cursor = db.cursor()
# 使用 execute()方法执行 SQL 查询
# 通配符 *,意思是查询表里所有内容
cursor.execute("select * from user")
# 使用 fetchone() 方法获取一行数据.
data = cursor.fetchone()
print(data)
# 关闭数据库连接
db.close()
运行结果:是以元组的形式返回的
查询多行语句
# 导入模块
import pymysql
# 打开数据库连接
db = pymysql.connect("127.0.0.1", "root", "123456", "user_test")
# 使用 cursor() 方法创建一个游标对象 cursor
cursor = db.cursor()
# 使用 execute()方法执行 SQL 查询
# 通配符 *,意思是查询表里所有内容
cursor.execute("select * from user")
# 使用 fetchall() 方法获取查询出的所有数据.
data = cursor.fetchall()
print(data)
# 关闭数据库连接
db.close()
运行结果:以元组的形式返回
5:增加数据
需要使用db.commit(),提交到数据库执行
语法:
insert 语句可以用来将一行或多行数据插到数据库表中, 使用的一般形式如下:
insert [into] 表名 [(列名1, 列名2, 列名3, ...)] values (值1, 值2, 值3, ...);
其中 [ ] 内的内容是可选的, 例如, 要给user_test数据库中的 user 表插入一条记录, 执行语句:
insert into studys values(3, '小明');
# 导入模块
import pymysql
# 打开数据库连接
db = pymysql.connect("127.0.0.1", "root", "123456", "user_test")
# 使用 cursor() 方法创建一个游标对象 cursor
cursor = db.cursor()
# 使用 execute()方法执行sql语句
cursor.execute("insert into user (id,name) values (3,'小明')")
# 使用commit()方法,提交到数据库执行
db.commit()
# 可以再执行查询语句,看数据是否插入成功
cursor.execute("select * from user where id ='3' and name = '小明'")
# # 使用fetchone()方法获取单条数据
data = cursor.fetchone()
print(data)
# 关闭数据库连接
db.close()
再次运行上面的代码,运行后报错,有两个错误信息
1:错误再哪一行
2: 下面这个错误原因是,主键冲突
在插入数据的时候,可能会出现主键冲突,为防止插入数据时,抛出异常,所以加上try...except
# 导入模块
import pymysql
# 打开数据库连接
db = pymysql.connect("127.0.0.1", "root", "123456", "user_test")
# 使用 cursor() 方法创建一个游标对象 cursor
cursor = db.cursor()
# 将sql语句赋值给一个变量
insert_sql = "insert into user (id,name) values (3,'小明')"
try:
# 使用 execute()方法执行sql语句
cursor.execute(insert_sql)
# 使用commit()方法,提交到数据库执行
db.commit()
# 可以再执行查询语句,看数据是否插入成功
cursor.execute("select * from user where id ='3' and name = '小明'")
# 使用fetchone()方法获取单条数据
data = cursor.fetchone()
print(data)
except:
print("数据插入失败,请查检sql语句")
# 想知道报了什么错,可以抛个异常
raise
# 关闭数据库连接
db.close()
6:修改数据
需要使用db.commit(),提交到数据库执行
语法:update 表名称 set 列名称=新值 where 更新条件;
# 导入模块
import pymysql
# 打开数据库连接
db = pymysql.connect("127.0.0.1", "root", "123456", "user_test")
# 使用 cursor() 方法创建一个游标对象 cursor
cursor = db.cursor()
# 将sql语句赋值给一个变量
update_sql = "update user set name='小小名' where id =3"
try:
# 使用 execute()方法执行sql语句
cursor.execute(insert_sql)
# 使用commit()方法,提交到数据库执行
db.commit()
# 可以再执行查询语句,看数据是否修改成功
cursor.execute("select * from user where id ='3'")
# 使用fetchone()方法获取单条数据
data = cursor.fetchone()
print(data)
except:
print("数据修改失败,请查检sql语句")
# 发生错误,回滚
db.rollback()
# 想知道报了什么错,可以抛个异常
raise
# 关闭数据库连接
db.close()
7:删除数据
需要使用db.commit(),提交到数据库执行
语法:delete from 表名称 where 删除条件;
# 导入模块
import pymysql
# 打开数据库连接
db = pymysql.connect("127.0.0.1", "root", "123456", "user_test")
# 使用 cursor() 方法创建一个游标对象 cursor
cursor = db.cursor()
# 将sql语句赋值给一个变量
update_sql = "delete from user where id =3"
try:
# 使用 execute()方法执行sql语句
cursor.execute(insert_sql)
# 使用commit()方法,提交到数据库执行
db.commit()
# 可以再执行查询语句,看数据是否删除成功
cursor.execute("select * from user)
# 使用fetchone()方法获取单条数据
data = cursor.fetchone()
print(data)
except:
print("数据修改失败,请查检sql语句")
# 发生错误,回滚
db.rollback()
# 想知道报了什么错,可以抛个异常
raise
# 关闭数据库连接
db.close()