MySQL帮助类

import pymysql
import traceback


class MysqlHelps:
    def __init__(self, host, db):
        self.connect = None
        self.mouse = None
        self.connect = pymysql.Connect(host=host, user="root", password="123456", db=db, port=3306, )
        self.mouse = self.connect.cursor()
        self.params = []
        self.insert_len = 100

    def execute(self, query, args=None):
        """
        执行单行sql语句;语句出错后鼠标回滚
        :param query: sql语句
        :param args: 用于给sql语句(%s)占位符传参
        :return:
        """
        try:
            self.mouse.execute(query, args)
            self.connect.commit()
        # TODO 接收数据重复异常
        except pymysql.err.IntegrityError:
            print("数据重复!")
        # TODO 接收sql语句表名异常
        except pymysql.err.ProgrammingError as e:
            print(traceback.format_exc())
            print("sql语句异常!", e)
        # TODO 接收数据其他异常异常
        except Exception as e:
            print(e)
            self.connect.rollback()

    def executemany(self, sql, params):
        """
        执行单行sql语句;语句出错后鼠标回滚
        :param sql: sql语句
        :param params: 用于给sql语句(%s)占位符传参
        :return:
        """
        try:
            self.mouse.executemany(sql, params)
            self.connect.commit()
        # TODO 接收数据重复异常
        except pymysql.err.IntegrityError:
            print("数据重复!")
        # TODO 接收sql语句表名异常
        except pymysql.err.ProgrammingError as e:
            print("sql语句异常!", e)
        # TODO 接收数据其他异常异常
        except Exception as e:
            print(e)
            self.connect.rollback()

    def insert_one(self, table, database_field: tuple, insert_filed: tuple):
        """
        插入单条数据
        :param table: 所需插入表格
        :param database_field: 所需插入表格字段
        :param insert_filed: 插入字段
        :return:
        """
        self.execute(f"insert into {table}{database_field} values{insert_filed} ")

    def insert_many(self, table, database_field: tuple, insert_filed: tuple):
        """
        插入多条数据,sql语句存入列表,列表长度为100时执行
        :param table: 所需插入表名
        :param database_field: 所需插入表字段
        :param insert_filed: 插入字段
        :return:
        """
        self.params.append(insert_filed)
        # TODO 自动获取字段数量,添加占位符
        s_count = (len(insert_filed) - 1) * "%s,"
        sql = f"INSERT INTO {table}{database_field} VALUES ({s_count}%s)"
        if len(self.params) == self.insert_len:
            self.executemany(sql, self.params)
            self.params = []

    def fetchone(self):
        return self.mouse.fetchone()

    def fetchall(self):
        for i in self.mouse.fetchall():
            print(i)

    '''写出执行到最后self.params中可能还有数据未插入数据库,如何处理'''
    def __del__(self):
        """
        断开连接释放游标
        :return:
        """
        if self.connect:
            self.connect.close()
            self.connect = None
        if self.mouse:
            self.mouse.close()
            self.mouse = None



posted @ 2023-07-19 19:30  向众神祈祷  阅读(41)  评论(0)    收藏  举报