一. 数据库在自动化测试中的应用

存测试数据

有的时候大批量的数据,我们需要存到数据库中,在测试的时候才能用到,测试的时候就从数据库中读取出来。这点是非常重要的!

存测试结果

二. python中的数据库之必备前提条件1. 安装:pyMysql

python2中使用mysqldb,python3中不再支持,换成pyMysql

2. 安装步骤

  1. 安装pyMysql模块:pip install PyMysql

  2. python连接mysql数据库,需要下载驱动:https://dev.mysql.com/downloads/connector/python/mysqlmysql官方网站提供的驱动版本,目前只支持到python3.4,python版本要与驱动支持的版本匹配才能安装成功

  3. 安装mysql图形界面Navicat,连接数据库后,方便查看/编辑数据库数据

(可选)安装mysql服务端:https://dev.mysql.com/downloads/mysql/

3. 数据库的常规操作

增删改查,所以我们要学的也是利用python去数据库里面读取数据,进行增删改查操作

三. python—mysql操作

对数据库进行操作步骤:

  1. 连接数据库、创建游标

  2. 准备好增、删、改、查sql语句

  3. 执行sql语句

  4. 读取执行结果—执行影响的行

  5. 关闭游标、关闭连接(释放连接数)

数据库连接信息如下:

IP地址、端口号、数据库名字、登录用户名、密码

pymysql中的连接数据库方法:

conn = pymysql.Connect(host, port, db, user, passwd)cursorclass = pymysql.cursors.DictCursor   指定返回数据为字典形式

创建游标:

cursor = conn.cursor()  每次操作都需要获取游标,才能进行

四. python之查询数据1. 查询数据语法

sql语句:select 字段 from 表名 where 条件语句

2. 展示数据,需要调用如下函数

fetchall():返回的数据格式是列表形式的

fetchone():返回的数据格式是元组形式的(可以用cursorclass = pymysql.cursors.DictCursor改成字典的形式)

3. 条件语句的用法

重点看代码,掌握用法

五. python之execute

execute中,sql语句的多种方式:

execute(sql语句、参数[可选]):

  1. 数据直接写在sql语句中

  2. 用格式化的方式

sql语句中:列表和元组   %s代替     字典:%(键名)s代替参数:为真正的数值

例:

insert_sql = "insert into test1(id, name) values(%s, %s)"data = [14, 'xiaojian']#字典data1 = {'id': 14, 'name': 'xiaojian'}insert_sql = "insert into test1(id, name) values(%(id)s, %(name)s)" cursor.execute(insert_sql, data) 

六. 提交和回滚

提交操作:在对数据库进行任何修改的情况下,都使用commit函数来提交操作

修改包括增加、修改、删除数据等操作

提交修改:

conn.commit()

回滚操作:在对数据库进行修改的过程中,因任何异常而导致修改中断,我们都应该使用回滚操作使数据库恢复到修改之前的状态

回滚修改:

conn.rollback()

七. 实例实例1:增加数据

#引入相关的库import pymysqlmysql_host = "localhost"mysql_port = 3306mysql_db = "xiaozhai"mysql_user = "root"mysql_passwd = "123456"#连接操作:编码格式的指定,默认返回数据类型的指定 conn = pymysql.Connect(host=mysql_host, user=mysql_user, password=mysql_passwd,           db=mysql_db, port=mysql_port, charset="utf8mb4", cursorclass=pymysql.cursors.DictCursor) #获取游标 cur = conn.cursor() #sql语句——增加数据 sql_insert = "insert into python6(name, sex) values('xiaohua', 'female')" #执行sql语句 try:   cur.execute(sql_insert)   conn.commit() except:   conn.rollback() #关闭连接、关闭游标 cur.close() conn.close()

运行结果:

实例2:查询数据

#引入相关的库import pymysqlmysql_host = "localhost"mysql_port = 3306mysql_db = "xiaozhai"mysql_user = "root"mysql_passwd = "123456"#连接操作:编码格式的指定,默认返回数据类型的指定conn = pymysql.Connect(host=mysql_host, user=mysql_user, password=mysql_passwd,                db=mysql_db, port=mysql_port, charset="utf8mb4",                cursorclass=pymysql.cursors.DictCursor)#获取游标cur = conn.cursor()#查询语句sql_select = "select * from python6"#执行cur.execute(sql_select)#获取查询结果——会获取一条数据data_a = cur.fetchone()print(data_a)print("=============================")#获取查询结果——获取所有条数据(游标已经到了第二条,从第二条开始读)data_all = cur.fetchall()print(data_all)#关闭连接、关闭游标cur.close()conn.close()

运行结果

{'id': 1, 'sex': 'male', 'name': 'xiaozhai'}=============================[{'id': 2, 'sex': 'male', 'name': 'xiaoli'}, {'id': 3, 'sex': 'female', 'name': 'xiaohua'}]

实例3:格式化方式插入数据

列表形式

#引入相关的库import pymysqlmysql_host = "localhost"mysql_port = 3306mysql_db = "xiaozhai"mysql_user = "root"mysql_passwd = "123456"#连接操作:编码格式的指定,默认返回数据类型的指定conn = pymysql.Connect(host=mysql_host, user=mysql_user, password=mysql_passwd,                db=mysql_db, port=mysql_port, charset="utf8mb4",                cursorclass=pymysql.cursors.DictCursor)#获取游标cur = conn.cursor()#格式化方式插入数据data_list = ["xiaozhao", "female"]sql_insert = "insert into python6(name, sex) values(%s, %s)"#执行sql语句try:    cur.execute(sql_insert, data_list)    conn.commit()except:    conn.rollback()#关闭连接、关闭游标cur.close()conn.close()

运行结果

字典形式

#引入相关的库import pymysqlmysql_host = "localhost"mysql_port = 3306mysql_db = "xiaozhai"mysql_user = "root"mysql_passwd = "123456"#连接操作:编码格式的指定,默认返回数据类型的指定conn = pymysql.Connect(host=mysql_host, user=mysql_user, password=mysql_passwd,                db=mysql_db, port=mysql_port, charset="utf8mb4",                cursorclass=pymysql.cursors.DictCursor)#获取游标cur = conn.cursor()#格式化方式插入数据data_dict = {"name": "xiaoliu", "sex":"female"}sql_insert = "insert into python6(name, sex) values (%(name)s, %(sex)s)"#执行sql语句try:    cur.execute(sql_insert, data_dict)    conn.commit()except:    conn.rollback()#关闭连接、关闭游标cur.close()conn.close()

运行结果

实例4:封装成类

import pymysqlclass Mysql_Operate:    def __init__(self, host, db, user, passwd, port=3306):#python学习交流群:711312441        #连接数据库        try:            self.conn = pymysql.Connect(host=host, user=user, password=passwd,                                   db=db, port=port, charset="utf8mb4",                                   cursorclass=pymysql.cursors.DictCursor)            #获取游标            self.cur = self.conn.cursor()            #没有异常,connect_flag为0            self.connect_flag = 0        except Exception as e:            print(e)            self.connect_flag = 1    #查找    def select_all_datas(self, select_sql):        #查询数据——execute函数        self.cur.execute(select_sql)        #获取所有的数据并返回        data_all = self.cur.fetchall()        return data_all    #更新数据    def update_datas(self, update_sql ):        try:            self.cur.execute(update_sql)            self.conn.commit()            return True        except:            self.conn.rollback()            return False    #关闭数据库连接    def close_db(self):        self.cur.close()        self.conn.close()mysql_host = "localhost"mysql_port = 3306mysql_db = "xiaozhai"mysql_user = "root"mysql_passwd = "123456"ms = Mysql_Operate(mysql_host, mysql_user, mysql_passwd, mysql_db)if ms.connect_flag == 0:    pass