python如何实现数据库连接,查询,更新,删除操作的封装

源码

import pymysql
from warnings import filterwarnings
from utils.logUtils.logControl import ERROR
from common.setting import ConfigHandler
from utils.readFilesUtils.regularControl import sql_regular
from utils.readFilesUtils.yamlControl import GetYamlData
from utils import sql_switch
# 忽略 Mysql 告警信息
filterwarnings("ignore", category=pymysql.Warning)


class MysqlDB(object):
    if sql_switch():
        def __init__(self):
            try:
                # 建立数据库连接
                self.conn = pymysql.connect(
                    host=self.read_mysql_config['host'],
                    user=self.read_mysql_config['user'],
                    password=self.read_mysql_config['password'],
                    db=self.read_mysql_config['db'],
                    charset = 'utf8'
                )
                # 使用 cursor 方法获取操作游标,得到一个可以执行sql语句,并且操作结果为字典返回的游标
                self.cur = self.conn.cursor(cursor=pymysql.cursors.DictCursor)
            except Exception as e:
                print("数据库连接失败,失败原因{0}".format(e))

        def __del__(self):
            try:
                # 关闭游标
                self.cur.close()
                # 关闭连接
                self.conn.close()
            except Exception as e:
               print("数据库连接失败,失败原因{0}".format(e))

        def query(self, sql, state="all"):
            """
                查询
                :param sql:
                :param state:  all 是默认查询全部
                :return:
                """
            try:
                self.cur.execute(sql)

                if state == "all":
                    # 查询全部
                    data = self.cur.fetchall()

                else:
                    # 查询单条
                    data = self.cur.fetchone()

                return data
            except Exception as e:
                print("数据库连接失败,失败原因{0}".format(e))

        def execute(self, sql: str):
            """
                更新 、 删除、 新增
                :param sql:
                :return:
                """
            try:
                # 使用 execute 操作 sql
                rows = self.cur.execute(sql)
                # 提交事务
                self.conn.commit()
                return rows
            except Exception as e:
                print("数据库连接失败,失败原因{0}".format(e))
                # 如果事务异常,则回滚数据
                self.conn.rollback()

        def assert_execution(self, sql: list, resp) -> dict:
            """
                执行 sql, 负责处理 yaml 文件中的断言需要执行多条 sql 的场景,最终会将所有数据以对象形式返回
                :param resp: 接口响应数据
                :param sql: sql
                :return:
                """
            try:
                if isinstance(sql, list):

                    data = {}
                    if 'UPDATE' and 'update' and 'DELETE' and 'delete' and 'INSERT' and 'insert' in sql:
                        raise ValueError("断言的 sql 必须是查询的 sql")
                    else:
                        for i in sql:
                            # 判断sql中是否有正则,如果有则通过jsonpath提取相关的数据
                            sql = sql_regular(i, resp)
                            # for 循环逐条处理断言 sql
                            query_data = self.query(sql)[0]
                            # 将sql 返回的所有内容全部放入对象中
                            for key, value in query_data.items():
                                data[key] = value

                        return data
                else:
                    raise ValueError("断言的查询sql需要是list类型")
            except Exception as e:
                print("数据库连接失败,失败原因{0}".format(e))
                raise

        def setup_sql_data(self, sql: list) -> dict:
            """
            处理前置请求sql
            :param sql:
            :return:
            """
            data = {}
            if isinstance(sql, list):
                for i in sql:
                    sql_date = self.query(sql=i)[0]
                    for key, value in sql_date.items():
                        data[key] = value
                return data


if __name__ == '__main__':
    mysqldb=MysqlDB()
    sql="SELECT * from qiubai"
    data=mysqldb.query(sql)
    sum=0
    for i in data:
        sum=sum+1

    print(sum)
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Leoon123

你的鼓励是我最大的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值