python-pymysql常用功能封装

Posted lady_killer9

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python-pymysql常用功能封装相关的知识,希望对你有一定的参考价值。

目录


简介

pymysql是一个客户端,本文进行一个简单封装,主要是结构化和批量操作

代码

import pymysql

class MysqlCli:
    def __init__(self,host,user,password,database,port=3306,charset='utf8',use_unicode=True):
        """
        初始化
        :param host:主机名
        :param user: 用户
        :param password: 密码
        :param database: 数据库
        :param port: 端口,默认3306
        :param charset: 字符集,默认utf8
        :param use_unicode: 使用unicode,默认True
        """
        try:
            self.connect=pymysql.connect(
                host=host,
                user=user,
                password=password,
                database=database,
                port=port,
                charset=charset,
                use_unicode=use_unicode
             )
            self.cursor = self.connect.cursor()
            print(f"连接数据库host database成功!!!")
        except Exception as e:
            print(f"init error: e")

    def close(self):
        self.cursor.close()
        self.connect.close()


    # 增删改(结构化)
    def operate(self,sql,params=None):
        try:
            self.cursor.executemany(sql,params)
            self.connect.commit()
        except Exception as e:
            print(f"operate error: e")
            self.connect.rollback()

    # 查询(结构化)
    def select(self,sql,params=None):
        try:
          tmp_cursor = self.connect.cursor(pymysql.cursors.DictCursor)
          tmp_cursor.execute(sql,params)
          res = tmp_cursor.fetchall()
          tmp_cursor.close()
          return res
        except Exception as e:
            print(f"select error: e")
            self.connect.rollback()

测试

上面代码放到了包sql_helper的helper.py中

from sql_helper.helper import MysqlCli
import uuid

if __name__ == '__main__':
    my_cli = MysqlCli(host="10.28.144.100", user="root", password="123456", database="peewee_learn")
    # 增加
    sql= "insert into users(id,name,age,gender,`desc`,time)VALUES(%s,%s,%s,%s,%s,%s)"
    print(sql)
    my_cli.operate(sql,[(str(uuid.uuid4()),'lady_killer',22,'1',"something","2023-01-25 19:39:37")])
    # 参数化查询
    sql = "select * from users where age = %s"
    res = my_cli.select(sql,18)
    print(res)
    my_cli.close()

结果截图:

可以结合Python-logging详解(彩色日志扩展,多进程安全等),添加日志。如果是并发情况下,不能仅使用一个客户端,可以考虑连接池。

参考

github-pymysql
pymysql-docs

以上是关于python-pymysql常用功能封装的主要内容,如果未能解决你的问题,请参考以下文章

python-pymysql

PyTorch杂谈01:官网demo & 视觉网络常用功能封装

Java封装常用功能

从零封装一个Android大图查看器

常用功能的封装

常用功能封装函数