自动化测试~python数据库设计

转载至:自动化测试~python数据库设计

我们在编写自动化测试用例的时候,不管是前置条件、后置条件、还是参数化、关联等,都会用到数据库,那Python对数据库的操作是如何实现的呢?

下面我们将用两种实现方式完成对数据库的增、删、改简单操作:

前置(安装依赖包)

pip install PyMySQL

方式一:

思路分析:

  • 初始化数据库连接配置信息

  • 建立数据库连接,创建数据库对象

  • 开启游标

  • 执行增、删、改sql语句

  • 事物提交

  • 执行失败,事务回滚

  • 关闭游标

  • 关闭数据库连接

上代码:


# -*- coding: utf-8 -*-
@公众号   : 芦荟全栈测开
# @File    : mysqlDB.py
# @Software: PyCharm

import pymysql
import logging

class MysqlDB():
    "数据库操作"
    def __new__(cls, host, port, user, passwd, database=None):
        if not hasattr(cls, "_instance"):
            cls._instance = super(MysqlDB, cls).__new__(cls)
        return cls._instance

    def __init__(self, host, port, user, passwd, database=None):
        try:
            self.conn = pymysql.connect(
                host=host,  #数据库host地址
                port=int(port), #数据库端口号
                user=user, #数据库用户名
                password=passwd, #数据库密码
                database=database, #数据库名
                charset="utf8"
            )
        except Exception as e:
            logging.error("数据库连接异常,异常报错信息:{}".format(e))

    def selectDb(self, sql):
        """
        数据库查询
        :param sql: 查询的sql语句
        :return: 查询结果,元祖
        """
        self.cursor = self.conn.cursor()
        try:
            self.cursor.execute(sql)
            data = self.cursor.fetchall()  # 返回所有记录
        except Exception as e:
            logging.error("数据库查询出现异常,异常报错信息:{}".format(e))
        else:
            return data
        finally:
            self.cursor.close()
            self.closeDb()

    def selectDb_dict(self, sql) -> dict:
        """
        数据库查询
        :param sql: 查询的sql语句
        :return: 查询结果,字典
        """
        self.cursor = self.conn.cursor(pymysql.cursors.DictCursor)
        try:
            self.cursor.execute(sql)
            data = self.cursor.fetchall()  # 返回所有记录
        except Exception as e:
            logging.error("数据库查询出现异常,异常报错信息:{}".format(e))
        else:
            return data
        finally:
            self.cursor.close()
            self.closeDb()
          
    def execute_sql(self, sql):
        "执行sql"
        self.cursor = self.conn.cursor()
        try:
            self.cursor.execute(sql)
            self.conn.commit()
        except Exception as e:
            self.conn.rollback()
            logging.error("sql语句执行失败{}".format(e))
        finally:
            self.cursor.close()
            self.closeDb()

    def insertDb(self, sql):
        """
        数据库插入数据
        :param sql: 插入数据库的sql语句
        :return: 
        """
        self.cursor = self.conn.cursor()
        try:
            self.cursor.execute(sql)
            self.conn.commit()
        except Exception as e:
            logging.error("数据库插入数据出现异常,异常报错信息:{}".format(e))
            self.conn.rollback()
        finally:
            self.cursor.close()
            self.closeDb()

    def updataDb(self, sql):
        """
        更新数据库数据
        :param sql: 更新数据库sql语句
        :return: 
        """
        self.cursor = self.conn.cursor(pymysql.cursors.DictCursor)
        try:
            self.cursor.execute(sql)
            self.conn.commit()
        except Exception as e:
            self.conn.rollback()
            logging.error("数据库更新数据出现异常,异常报错信息:{}".format(e))
        finally:
            self.cursor.close()
            self.closeDb()

    def closeDb(self):
        """数据库连接关闭"""
        try:
            self.conn.close()
        except Exception as e:
            logging.error("关闭mysql失败:{}".format(e))

API解读:

pymysql.connect() 的参数即为 Connection() 构造函数的参数。
self.conn.cursor()                  开启游标
self.cursor.execute(sql)            执行sql语句
self.conn.commit()                  事物commit提交
self.conn.rollback()                事物回滚
self.conn.close()                   关闭数据库连接

调用:

conInfo = {
        "host": "localhost",
        "port": 3306,
        "user": "root",
        "passwd": "root",
        "database": "mysql"
    }
sql = "SELECT * FROM USER;"
result = MysqlDB(**conInfo).selectDb(sql)

方式二:


# -*- coding: utf-8 -*-
@公众号   : 芦荟全栈测开
# @File    : mysqlDB.py
# @Software: PyCharm


import pymysql
import logging


class MysqlDB():
    "数据库操作"

    def __init__(self, host, port, user, passwd, database=None):
        try:
            self.conn = pymysql.connect(
                host=host,
                port=int(port),
                user=user,
                password=passwd,
                database=database,
                charset="utf8"
            )
            self.cursor = self.conn.cursor()
        except Exception as e:
            logging.error("数据库连接异常,异常报错信息:{}".format(e))


    def __enter__(self):
        return self

    def __exit__(self, exc_type, exc_val, exc_tb):
        self.cursor.close()
        self.conn.close()

    def selectAll(self, sql):
        """
        查询所有
        :param sql:  sql语句
        :return: 返回查询结果(元祖)
        """
        try:
            self.cursor.execute(sql)
            result = self.cursor.fetchall()
        except Exception as e:
            logging.error(f"数据库查询失败->{e}-{sql}")
        else:
            return result

    def selectOne(self, sql):
        """
        查询单挑数据
        :param sql:
        :return: 返回查询结果(元祖)
        """
        try:
            self.cursor.execute(sql)
            result = self.cursor.fetchone()
        except Exception as e:
            logging.error(f"数据库单挑查询失败->{e}->{sql}")
        else:
            return result

    def insertSql(self, sql):
        """
        数据库插入
        :param sql:
        :return:
        """
        try:
            self.cursor.execute(sql)
            self.conn.commit()
        except Exception as e:
            self.conn.rollback()
            logging.error(f"数据库插入失败->{e}->{sql}")


    def updateSql(self,sql):
        """
        数据库更新
        :param sql:
        :return:
        """
        try:
            self.cursor.execute(sql)
            self.conn.commit()
        except Exception  as e:
            self.conn.rollback()
            logging.error(f"数据库更新操作失败->{e}->{sql}")

 调用:

conInfo = {
        "host": "localhost",
        "port": 3306,
        "user": "root",
        "passwd": "root",
        "database": "mysql"
    }
    sql = "SELECT * FROM USER;"
    with MysqlDB(**conInfo) as db:
        result = db.selectAll(sql)

细心的同学可能有疑问,在更新/插入方法体实现的怎么一样啊?当然可以这么写

  def insertSql(self, tableName, key, datas):
        """
        数据库插入
        :param tableName: 表名
        :param key: 插入的字段名
        :param values: 插入的字段值
        :return:
        """
        try:
            self.cursor.execute(f"INSERT INTO {tableName} ({key,}) values ({datas,})")
            self.conn.commit()
        except Exception as e:
            self.conn.rollback()
            logging.error(f"数据库插入失败->{e}->{sql}")

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值