接口自动化如何封装mysql操作

数据查询类封装

1. 功能分析
  1. 可以连接不同sql数据库
  2. 查一条数据,多条数据
  3. 可以获取不同格式的数据
2. 封装成数据库查询类

封装思路:       

  1. 数据库查询模块有多个功能,且需要复用,所以封装成类
  2. 创建对象方法实现各种查询
  3. 在构造方法中创建连接 
  • 废话不多说,直接上代码!!!

    
    # -*- coding: utf-8 -*-
    
    # @Time : 2019/11/13 14:51
    
    # @Author : kira
    
    # @Email : 262667641@qq.com
    
    # @File : do_mysql.py
    
    # @Project : risk_project
    
    
    import pymysql
    
    from pymysql.cursors import DictCursor
    
    
    
    class DoMysql:
    
    """
    
    sql数据库查询类
    
    """
    
    
    def __init__(self, db_config: dict):
    
    # 创建连接
    
    engine = db_config.pop('engine', 'mysql')
    
    if engine.lower() == 'mysql':
    
    self.conn = pymysql.connect(**db_config)
    
    elif engine.lower() == 'oracle':
    
    pass
    
    
    def __execute(self, sql, action, res_type='t', *args):
    
    """
    
    :param sql:
    
    :param action: 字符串,指定执行cursor对应的方法
    
    :param res_type: 返回数据类型
    
    :param args:
    
    :return:
    
    """
    
    if res_type == 't':
    
    cursor = self.conn.cursor()
    
    else:
    
    cursor = self.conn.cursor(DictCursor)
    
    try:
    
    cursor.execute(sql)
    
    return getattr(cursor, action)(*args)
    
    except Exception as e:
    
    raise e
    
    finally:
    
    cursor.close()
    
    
    def get_one(self, sql, res_type='t'):
    
    """
    
    获取一条数据
    
    :param sql:
    
    :param res_type: 返回数据的类型,默认为t表示以元组返回,'d'表示以字典的形式返回
    
    :return: 元组/字典
    
    """
    
    # 数据库若断开即重连
    
    self.reConnect()
    
    return self.__execute(sql, 'fetchone', res_type)
    
    
    def get_many(self, sql, size, res_type='t'):
    
    # 数据库若断开即重连
    
    self.reConnect()
    
    return self.__execute(sql, 'fetchmany', res_type, size)
    
    
    def get_all(self, sql, res_type='t'):
    
    # 数据库若断开即重连
    
    self.reConnect()
    
    return self.__execute(sql, 'fetchall', res_type)
    
    
    def exist(self, sql):
    
    if self.get_one(sql):
    
    return True
    
    else:
    
    return False
    
    
    def reConnect(self):
    
    """
    
    重连机制
    
    :@return
    
    """
    
    try:
    
    self.conn.ping()
    
    except:
    
    self.conn()
    
    
    def __del__(self):
    
    """
    
    对象销毁的时候自动会被调用
    
    :return:
    
    """
    
    self.conn.close()
    
    
    
    if __name__ == '__main__':
    
    db = {
    
    'engine': 'mysql', # 指定mysql数据
    
    'host': '127.0.0.1',
    
    'user': 'admin',
    
    'password': '12345',
    
    'port': 3306,
    
    'db': 'mysql',
    
    'charset': 'utf8'
    
    }
    
    db = DoMysql(db)
    
    sql = 'select id, reg_name, mobile_phone from member limit 10'
    
    # res = db.get_one(sql)
    
    res = db.get_many(sql, size=5)
    
    print(res)

    最后: 下方这份完整的软件测试视频教程已经整理上传完成,需要的朋友们可以自行领取【保证100%免费】

    ​​​软件测试面试文档

    我们学习必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有字节大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。

    在这里插入图片描述

    在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值