python-pymysql常用功能封装


简介

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

包安装

pip3 install 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
        """

        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(pymysql.cursors.DictCursor)

    # 关闭连接
    def close(self):
        self.cursor.close()
        self.connect.close()

    # 增删改
    def operate(self,sql,param=None)->int:
        """
        :param sql: sql语句
        :param param: 元组
        :return: 受影响行数 int
        """
        try:
            self.cursor.execute(sql,param)
            self.connect.commit()
            return self.cursor.rowcount
        except Exception as e:
            self.connect.rollback()
            raise Exception(f"operate error: {e}")

    # 批量增删改
    def operate_many(self,sql,params=None)->int:
        """
        :param sql: sql语句
        :param params: params是列表,元素是元组
        :return: 受影响行数 int
        """
        try:
            self.cursor.executemany(sql,params)
            self.connect.commit()
            return self.cursor.rowcount
        except Exception as e:
            self.connect.rollback()
            raise Exception(f"operate_many error: {e}")

    # 查询(结构化)
    def select_one(self,sql,params=None)->dict:
        """
        :param sql: sql语句
        :param params: 元组
        :return: 字典
        """
        try:
          self.cursor.execute(sql,params)
          res = self.cursor.fetchone()
          self.cursor.close()
          return res
        except Exception as e:
            self.connect.rollback()
            raise Exception(f"select_one error: {e}")

    # 批量查询(结构化)
    def select_all(self,sql,params=None)->list:
        """
        :param sql: sql语句
        :param params: 元组
        :return: 列表,元素为字典
        """
        try:
          self.cursor.execute(sql,params)
          res = self.cursor.fetchall()
          self.cursor.close()
          return res
        except Exception as e:
            self.connect.rollback()
            raise Exception(f"select_all error: {e}")

    # 插入一条数据 字典与列名保持一致
    def insert_one(self,table:str,data:dict)->int:
        """
        :param table: 表名
        :param data: 数据
        :return:
        """
        columns = '`'+'`,`'.join(data.keys())+'`'
        placeholders = ', '.join(['%s'] * len(data))
        query = f"INSERT INTO `{table}` ({columns}) VALUES ({placeholders})"
        return self.operate(query, tuple(data.values()))

    # 插入多条数据
    def insert_many(self,table:str,data_list:list)->int:
        """
        :param table: 表名
        :param data_list: 列表,元素为字典
        :return:
        """
        columns = '`'+'`,`'.join(data_list[0].keys())+'`'
        placeholders = ','.join(['%s'] * len(data_list[0]))
        query = f'INSERT INTO `{table}` ({columns}) VALUES ({placeholders})'
        args = [tuple(data.values()) for data in data_list]
        return self.operate_many(query, args)

    # 更新一条数据
    def update_one(self,table:str,data:dict,condition:str):
        """
        :param table: 表名
        :param data: 数据,字典
        :param condition: where后条件
        :return:
        """
        set_clause = ', '.join([f"{key} = %s" for key in data.keys()])
        query = f"UPDATE `{table}` SET {set_clause} WHERE {condition}"
        return self.operate(query,tuple(data.values()))

测试

表结构如下:
在这里插入图片描述
上面代码放到了helper.py中,测试代码如下:

from helper import MysqlCli
import uuid
import unittest
my_cli = MysqlCli(host="127.0.0.1", user="root", password="12345678", database="test")

class Test(unittest.TestCase):
    def test_operate(self):
        sql = "delete from users"
        res = my_cli.operate(sql)
        print(res)
        my_cli.close()

    def test_insert_one(self):
        user = {
            "id": str(uuid.uuid4()),
            "name":"lady_killer"
        }
        res = my_cli.insert_one("users",user)
        print(res)
        my_cli.close()

    def test_insert_many(self):
        users = [
            {
                "id": str(uuid.uuid4()),
                "name": "lady_killer1"
            },
            {
                "id": str(uuid.uuid4()),
                "name": "lady_killer2"
            }
        ]
        res = my_cli.insert_many("users",users)
        print(res)
        my_cli.close()

    def test_update_one(self):
        user = {
            "name":"lady_killer9"
        }
        res = my_cli.update_one("users",user,"id='26c2a5be-4092-486c-abe8-e9cba0682729'")
        print(res)
        my_cli.close()



结果截图:
在这里插入图片描述
在这里插入图片描述

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

参考

github-pymysql
pymysql-docs

  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: Python3 pymysql操作封装是指将pymysql库中的常用操作进行封装,以便在项目中更方便地使用。这些操作包括连接数据库、执行SQL语句、获取查询结果等。通过封装,可以简化代码,提高代码的可读性和可维护性。同时,还可以避免SQL注入等安全问题。 ### 回答2: Python是一种高级编程语言,使用Python能够快速高效地进行开发,因此在众多的Python库和框架中,Pymysql是其中一种广泛使用的数据库库,也是Python3中最常用MySQL数据库库之一。Pymysql库首次发布于2012年,是Python3中用于操作MySQL数据库的库,其使用简单、性能优良,是Python开发者数据库应用开发的重要工具,下面是Python3 Pymysql操作的封装: 1. 连接数据库 Pymysql库连接MySQL数据库的方式是创建一个数据库连接对象,使用连接对象对MySQL进行操作。连接数据库的示例代码如下: ```python import pymysql # 创建一个数据库连接对象 conn = pymysql.connect(host='localhost', port=3306, user='root', password='password', database='test') # 创建游标对象 cursor = conn.cursor() # 关闭游标对象 cursor.close() # 关闭数据库连接 conn.close() ``` 2. 执行SQL语句 使用Pymysql库执行SQL语句的方式是使用游标对象进行操作。执行SQL语句的示例代码如下: ```python import pymysql # 创建一个数据库连接对象 conn = pymysql.connect(host='localhost', port=3306, user='root', password='password', database='test') # 创建游标对象 cursor = conn.cursor() # 执行SQL语句 cursor.execute('select * from student;') # 获取查询结果 result = cursor.fetchall() # 打印查询结果 print(result) # 关闭游标对象 cursor.close() # 关闭数据库连接 conn.close() ``` 3. 封装Pymysql库操作 为了方便使用和开发,可以将Pymysql库的操作进行封装。使用PythonPymysql库进行封装,能够简化操作过程和提高开发效率。封装Pymysql库的示例代码如下: ```python import pymysql class MySQL(object): """ Pymysql库操作封装 """ def __init__(self, host, port, user, password, database): """ :param host: 数据库主机地址 :param port: 数据库连接端口 :param user: 数据库用户名 :param password: 数据库连接密码 :param database: 数据库名称 """ self.host = host self.port = port self.user = user self.password = password self.database = database self.conn = pymysql.connect(host=self.host, port=self.port, user=self.user, password=self.password, database=self.database) self.cursor = self.conn.cursor() def execute(self, sql): """ 执行SQL查询语句 :param sql: SQL查询语句 :return: 执行结果 """ self.cursor.execute(sql) result = self.cursor.fetchall() return result def close(self): """ 关闭游标对象和数据库连接 """ self.cursor.close() self.conn.close() ``` 上述代码中,MySQL类的__init__方法会负责打开数据库连接、设置游标对象等,execute方法用于执行SQL语句,并返回执行结果,close方法用于关闭游标对象和数据库连接。 以上是对Pymysql库在Python3中的操作封装的简单介绍。Pymysql的使用具有高效性和灵活性,为Python处理MySQL数据库数据提供了更加强大的支持。当然,我们在真正使用Pymysql库时,还需要根据自己的需要进行具体的操作和改造。 ### 回答3: Python是一种简单易读,灵活和功能丰富的编程语言,扩展模块庞大。MySQL是流行的关系型数据库的一种,而pymysqlPythonMySQL之间的一个连接器。PymysqlPython操作数据库变得更加容易和高效,特别是当你处理大量数据和多任务应用时。在本文中,我们将讨论Python3 pymysql操作封装pymysqlPython针对MySQL的一个纯Python客户端。它提供了与MySQL数据库进行连接、查询、执行语句和交互的API。在开发项目时,有必要封装pymysql,以便我们可以在不用考虑底层细节的情况下轻松和高效地访问数据库。下面是Python3 pymysql操作封装的简单实现: 首先,需要安装pymysql模块,它可以使用pip进行安装。 pip install pymysql 然后我们可以编写一个基本类,工厂模式的设计可以实现该类的单例实例化: import pymysql class MysqlHelper(object): __instance = None def __new__(cls, *args, **kwargs): if cls.__instance is None: cls.__instance = object.__new__(cls) cls.__instance.conn = pymysql.connect( host='localhost', port=3306, user='root', password='root', database='test', charset='utf8' ) cls.__instance.cursor = cls.__instance.conn.cursor() return cls.__instance def __del__(self): self.close() def execute(self, sql, params=None): try: self.cursor.execute(sql, params) self.conn.commit() except Exception as e: self.conn.rollback() raise e def execute_one(self, sql, params=None): try: self.cursor.execute(sql, params) result = self.cursor.fetchone() self.conn.commit() return result except Exception as e: self.conn.rollback() raise e def execute_all(self, sql, params=None): try: self.cursor.execute(sql, params) results = self.cursor.fetchall() self.conn.commit() return results except Exception as e: self.conn.rollback() raise e def close(self): if self.cursor: try: self.cursor.close() except: pass if self.conn: try: self.conn.close() except: pass 此类中包含连接MySQL数据库的基本信息,实现了单例模式,并提供了execute,execute_one,execute_all和close方法。这些方法可以执行数据库查询、执行语句和关闭连接等。它们是最常用和重要的pymysql方法之一,可以轻松地完成MySQL数据库的操作。 我们可以在代码中调用这些方法来进行数据库操作: (1)执行语句: mysql_helper = MysqlHelper() mysql_helper.execute("insert into user(name, age) values ('zhangsan', 23)") (2)查询单行数据: mysql_helper = MysqlHelper() result = mysql_helper.execute_one("select * from user where name = %s", ["zhangsan"]) (3) 查询多行数据 : mysql_helper = MysqlHelper() results = mysql_helper.execute_all("select * from user") (4)关闭连接: mysql_helper = MysqlHelper() mysql_helper.close() 综上所述,Python3 pymysql操作封装可以使用单例模式和工厂模式来实现,这使得在访问MySQL数据库时操作简单和轻松。最后,我们还可以将pymysql封装Python的其他模块和框架一起使用,这有助于提高代码复用性和可读性,使项目开发更加高效和便捷。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

lady_killer9

感谢您的打赏,我会加倍努力!

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

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

打赏作者

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

抵扣说明:

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

余额充值