python自动化测试(5)--操作mysql数据库
一、数据库操作的基本流程
1、安装并导入操作mysql数据库的模块:pymysql
2、与数据库建立连接:conn = pymysql.connect(系列参数)
常用的系列参数包含:
host、user、password、port、database、charset(编码方式)、cursorclass(用于指定查询结果的数据格式,默认是tuple)
3、创建游标:用于操作sql语句
cur = conn.cursor()
4、执行sql语句
cur.execute(sql语句) # 返回值为查询结果的数量
5、获取查询的结果
5.1、获取单条查询结果
one = cur.fetchone()
5.2、查询所有的查询结果
all = cur.fetchall()
6、关闭连接资源
cur.close()
conn.close()
7、说明:
在执行数据库查询操作之前,为了确保查询的数据准确,需要单独执行一条 self.conn.commit()语句。
二、代码实现
1 import pymysql 2 3 # 1、建立连接 4 conn = pymysql.connect( 5 host="api.lemonban.com", 6 user="future", 7 password="123456", 8 port=3306, 9 database="futureloan", 10 charset="utf8", 11 cursorclass=pymysql.cursors.DictCursor # 将查询的结果使用字典进行保存(默认使用元组进行保存) 12 ) 13 14 # 2、创建游标 15 cur = conn.cursor() 16 17 # 3、执行sql语句 18 sql = "select * from member limit 3" 19 cur.execute(sql) # 返回值为查询结果的数量 20 # 4、获取单条查询的结果 21 one = cur.fetchone() 22 print("单条查询的结果为:",one) 23 # 5、获取所有的查询结果 24 all = cur.fetchall() 25 for item in all: 26 print(item) 27 pass 28 # 6、关闭连接资源 29 cur.close() 30 conn.close()
三、封装数据库操作流程
要求:在建立数据库连接时,参数通过配置文件获取
1 import pymysql 2 3 from integration1.Commons.handle_config import handleConfig 4 5 class HandleDB(): 6 7 def __init__(self): 8 # 建立连接 9 self.conn = pymysql.connect( 10 host=handleConfig.get("mysql","host"), 11 user=handleConfig.get("mysql","user"), 12 password=handleConfig.get("mysql","password"), 13 port=handleConfig.getint("mysql","port"), 14 database=handleConfig.get("mysql","database"), 15 charset="utf8", 16 cursorclass=pymysql.cursors.DictCursor 17 ) 18 # 创建游标 19 self.cur = self.conn.cursor() 20 pass 21 # 获取1条数据 22 def select_one_data(self,sql): 23 self.cur.execute(sql) 24 return self.cur.fetchone() 25 # 获取所有数据 26 def select_all_data(self,sql): 27 self.cur.execute(sql) 28 return self.cur.fetchall() 29 #获取查询的条数 30 def get_count(self,sql): 31 return self.cur.execute(sql) 32 33 def update_data(self,sql): 34 self.cur.execute(sql) # 更新数据库 35 self.conn.commit() # 提交 36 pass 37 38 # 关闭操作 39 def close(self): 40 self.cur.close() # 关闭游标 41 self.conn.close() # 关闭连接 42 pass 43 44 if __name__ == '__main__': 45 sql = "select * from member limit 3" 46 handleDB = HandleDB() 47 count = handleDB.get_count(sql) 48 print(count) 49 one = handleDB.select_one_data(sql) 50 print(one) 51 all = handleDB.select_all_data(sql) 52 print(all)
今后,如果我们需要操作mysql的数据库资源时,只需要导入该模块即可。通过实例化HandleDB,就可以进行相应的查询操作。
四、应用
要求:随机生成一个手机号码,要求生成的手机号码未在数据库中注册
思路:
1、先生成符合要求的11位手机号码
2、通过手机号字段查询数据库,根据查询结果确定手机号码是否已在数据库中注册:
2.1、若已存在,重复执步骤1和2
2.2、若不存在,则返回生成的手机号码
1 import random 2 3 from integration1.Commons.handle_db import HandleDB # 导入操作数据库的类 4 5 prefix = [133, 149, 153, 173, 177, 180, 181, 189, 199, 6 130, 131, 132, 145, 155, 156, 166, 171, 175, 176, 185, 186, 166, 7 134, 135, 136, 137, 138, 139, 147, 150, 151, 152, 157, 158, 159, 172, 178, 182, 183, 184, 187, 188, 198 8 ] 9 10 def get_new_phone(): 11 handleDB = HandleDB() 12 while True: 13 # 生成电话号码 14 phone = __generate_phone() 15 #校验生成的号码是否已存在数据库中 16 sql = "select * from member where mobile_phone = '{}'".format(phone) 17 count = handleDB.get_count(sql) 18 if count == 0: # 如果生成的手机号码在数据库中不存在,则返回该手机号码 19 handleDB.close() 20 return phone 21 pass 22 23 def __generate_phone(): 24 # 生成电话号码的前缀 25 pre = prefix[random.randint(0,len(prefix)-1)] 26 phone = str(pre) 27 for _ in range(8): 28 phone += str(random.randint(0,9)) 29 pass 30 return phone 31 pass 32 33 if __name__ == '__main__': 34 print(get_new_phone())