什么是 PyMySQL?
PyMySQL是在Python3.x版本中用于连接MySQL服务器的一个库,Python2中则使用mysqldb。它是一个遵循 Python数据库APIv2.0规范,并包含了pure-Python MySQL客户端的库。
为什么需要连接数据库?
在接口测试过程中,常常会有增删改查的操作,但是单从接口返回不能确保数据是否真的按照我们期望的结果来走,这时就需要查询数据库来核对,如注册接口,需要查询账号是否新建成功;接口修改数据,数据库的数据是否被更新到最新等等。
安装
cmd命令行执行
pip install pymysql
操作数据库
连接数据库之前,要先确保数据库已经建立。操作数据库的步骤可以简单分为三步:
1. 连接数据库
pymysql.connect(host, user, password, port, charset)
2. 创建游标对象
cursor()
3. 执行sql
execute(sql)
import pymysqlcon = pymysql.connect(host=\"192.168.100.101\", # 连接数据库user=\"test\",password=\"123456\",port=3306,charset=\"utf8\")cur = con.cursor() # 创建游标sql = \"SELECT * FROM member WHERE username =\'test\'\"res = cur.execute(sql) # 执行sql
上面中提到一个概念:游标,实际上就是一种能从包括多条数据记录的结果集中每次提取一条记录的机制,就等于光标的上下移动,尽管游标能遍历结果中的所有行,但它一次只指向一行。游标的作用就是用于对查询数据库所返回的记录进行遍历,以便进行相应的操作,就像电脑的鼠标一样。
提取查询结果
? fetchall:返回的是一个查询集(元祖的形式,查询到的每一条数据为这个元祖中的一个元素)
? fatchone:获取查询到的数据中的第一条
import pymysqlcon = pymysql.connect(host=\"127.0.0.1\",user=\"test\",password=\"123456\",port=3306,charset=\"utf8\")cur = con.cursor() # 创建游标sql = \"SELECT mobile_phone FROM futureloan.member limit 4\"res = cur.execute(sql)datas = cur.fetchall()print(datas)for i in datas:print(i)
运行结果:
C:\\software\\python\\python.exe D:/learn/test.py((\'13678703234\',), (\'15690403234\',), (\'15680113234\',), (\'13503071234\',))(\'13678703234\',)(\'15690403234\',)(\'15680113234\',)(\'13503071234\',)Process finished with exit code 0
?特别注意:
执行完增删改的sql语句之后,需要进行
commit
提交确认,这里
commit
的作用相当于数据库中的提交事务。
封装
按需封装,想怎么封就怎么装。
import pymysqlfrom common.my_config import confclass HandleDB:def __init__(self):# 读取配置文件的数据库信息self.con = pymysql.connect(host=conf.get_str(\"mysql\", \"host\"),user=conf.get_str(\"mysql\", \"user\"),password=conf.get_str(\"mysql\", \"password\"),port=conf.get_int(\"mysql\", \"port\"),charset=\"utf8\")self.cur = self.con.cursor()def get_one(self, sql):\"\"\"获取查询到的第一条数据\"\"\"self.con.commit()self.cur.execute(sql)return self.cur.fetchone()def get_all(self, sql):\"\"\"获取sql语句查询到的所有数据\"\"\"self.con.commit()self.cur.execute(sql)return self.cur.fetchall()def count(self, sql):\"\"\"统计sql语句查询到的数据\"\"\"self.con.commit()res = self.cur.execute(sql)return resdef close(self):self.cur.close() # 关闭游标对象self.con.close() # 断开连接