长期更新补充,建议关注收藏点赞!
目录
简介
安装
pip install pymysql
- 应用场景:
-
- 接口自动化测试中关于数据库:校验测试数据、构造测试数据
校验数据的背景是当响应结果中没有时,就需要查看数据库里的数据
构造测试数据的背景是测试接口前不能确定数据是否已存在;以及 测试数据使用一次就不可再用的情况。
- 接口自动化测试中关于数据库:校验测试数据、构造测试数据
使用
import 导包->创建connection->获取cursor->执行增删改查->关闭cursor->关闭connection
建立一个连接即可,cursor可以有多个,从指针cursor位置提取其后一行,移动一行。
如果变量名被当成系统关键字,则需要用``包起来,如
read
=read
+2
python
# 总体使用方法
import pymysql
conn=pymysql.connect()
cursor=conn.cursor()
cursor.execute("SQL language")
#select
fetch#提取数据
#insert,update,delete,
conn.commit()#成功,提交事务
conn.rollback()#失败,回滚事务
cursor.close()
conn.close()
#fetch
fetchone()#提取一行
fetchmany(size)#提取size行
fetchall()#提取全部
cursor.rownumber=0 #设置cursor位置 以行为单位 0为文件头
# 实例
conn=pymysql.connect(host="",port=0,user="",password="",database="",charset="")
'''
host 数据库主机ip地址
port int格式
database 要连接的数据库名
charset 字符集 utf8
conn返回成功连接数据库的对象
'''
cursor=conn.cursor()
cursor.execute("select version()")
result=cursor.fetchone()
print(result)
cursor.close()
conn.close()
#可以加入异常捕获
conn=None
cursor=None
try:
....
conn.commit()
except Exception as err:
print(str(err))
conn.rollback()
finally:
cursor.close()
conn.close()
#查看语句执行影响多少行
print(conn.affected_rows())
封装复用
- 封装成设置文件
- 封装类
python
#config/setting.py
# 数据库信息配置
DB_CONFIG = {
"host": "127.0.0.1",
"user": "root",
"password": "123456",
"database": "test",
"port": 3306,
"charset": "utf8"
}
#utils/mysqlutil.py
# 导入PyMySQL库
import pymysql
# 导入数据库的配置信息
from config.settings import DB_CONFIG
class MysqlUtil:
def __init__(self):
# 读取配置文件,初始化pymysql数据库连接
self.db = pymysql.connect(**DB_CONFIG)
# 创建数据库游标 返回字典类型的数据
self.cursor = self.db.cursor(cursor=pymysql.cursors.DictCursor)
# 获取单条数据
def get_fetchone(self, sql):
self.cursor.execute(sql)
return self.cursor.fetchone()
# 获取多条数据
def get_fetchall(self, sql):
self.cursor.execute(sql)
return self.cursor.fetchall()
# 执行更新类sql
def sql_execute(self, sql):
try:
# db对象和指针对象同时存在
if self.db and self.cursor:
print("sql是", sql)
self.cursor.execute(sql)
# 提交执行sql到数据库,完成insert或者update相关命令操作,非查询时使用
self.db.commit()
print("sql执行成功~!")
except Exception as e:
# 出现异常时,数据库回滚
self.db.rollback()
return False
# 关闭对象,staticmethod静态方法,可以直接使用类名.静态方法
@staticmethod
def close(self):
# 关闭游标对象
if self.cursor is not None:
self.cursor.close()
# 关闭数据库对象
if self.db is not None:
self.db.close()
if __name__ == '__main__':
mysql = MysqlUtil()
res1 = mysql.get_fetchone("select * from case_list")
print(res1)
res2 = mysql.get_fetchall("select * from case_list")
print(res2)
res3 = mysql.sql_execute("insert into test_result_record (case_id,result) values ('9999','测试通过');")
print(res3)
mysql.close
del mysql#手动释放
python
#类方法版本
import pymysql
# 封装数据库工具类
class DBUtil(object):
# 添加类属性
conn = None
@classmethod
def __get_conn(cls):
# 判断 conn 是否为空,如果是,再创建
if cls.conn is None:
cls.conn = pymysql.connect(host="211.103.136.244", port=7061, user="student",password="iHRM_student_2021",database="test_db", charset="utf8")
# 返回 非空连接
return cls.conn
@classmethod
def __close_conn(cls):
# 判断,conn 不为空,需要关闭。
if cls.conn is not None:
cls.conn.close()
cls.conn = None
# 常用方法:查询一条
@classmethod
def select_one(cls, sql):
cursor = None
res = None
try:
# 获取连接
cls.conn = cls.__get_conn()
# 获取游标
cursor = cls.conn.cursor()
# 执行 查询语句
cursor.execute(sql)
# 提取一条结果
res = cursor.fetchone()
except Exception as err:
print("查询sql错误:", str(err))
finally:
# 关闭游标
cursor.close()
# 关闭连接
cls.__close_conn()
# 将查询sql执行的 结果,返回
return res
# 常用方法:增删改
@classmethod
def uid_db(cls, sql):
cursor = None
try:
# 获取连接
cls.conn = cls.__get_conn()
# 获取游标
cursor = cls.conn.cursor()
# 执行 uid 语句
cursor.execute(sql)
print("影响的行数:", cls.conn.affected_rows())
# 提交事务
cls.conn.commit()
except Exception as err:
# 回滚事务
cls.conn.rollback()
print("增删改 SQL 执行失败:", str(err))
finally:
# 关闭游标
cursor.close()
# 关闭连接
cls.__close_conn()
python
#其他文件里调用使用封装好的工具
from myutils import DBUtil
res = DBUtil.select_one("select * from t_book;")
#类方法的调用 不需要创建实例 直接调用
print("查询结果为:", res)
DBUtil.uid_db("update t_book set is_delete = 1 where id = 1111;")
- 封装解决了代码冗余、代码耦合度高、代码维护成本高。
-
- 耦合度(Coupling)是对模块间关联程度的度量。耦合的强弱取决与模块间接口的复杂性、调用模块的方式以及通过界面传送数据的多少。
模块间的耦合度是指模块之间的依赖关系,包括控制关系、调用关系、数据传递关系。模块间联系越多,其耦合性越强,同时表明其独立性越差。
- 耦合度(Coupling)是对模块间关联程度的度量。耦合的强弱取决与模块间接口的复杂性、调用模块的方式以及通过界面传送数据的多少。