当前位置: 首页 > article >正文

PyMysql 02|(包含项目实战)数据库工具类封装

目录

七、数据库工具类封装

1、封装的目的

2、设计数据库工具类

3、实现类方法

1️⃣获取、关闭连接

2️⃣查询一条记录

3️⃣增删改数据

4️⃣完整封装代码实现


七、数据库工具类封装

1、封装的目的

将常用的数据库操作,封装到一个方法。 后续再操作数据库时,通过调用该方法来实现。

提高代码的复用性!

2、设计数据库工具类

class DBUtil(object):
    @classmethod        # 标明该方法为类方法,这样可以不用创建实例就可以调用方法
    def __getconn(cls): # __把该方法私有,只有类内部可以使用
        pass

    @classmethod
    def __closeconn(cls):
        pass

    # 常用方法:查询一条
    @classmethod
    def select_one(cls,sql):
        pass

    # 常用方法:增删改
    @classmethod
    def uid_db(cls, sql):
        pass

3、实现类方法

1️⃣获取、关闭连接
import pymysql

# 封装数据库工具类
class DBUtil(object):
    # 添加类属性
    conn = None
 
    @classmethod
    def __get_conn(cls):
        # 判断 conn 是否为空, 如果是,再创建
        if cls.conn is None:
            cls.conn = pymysql.connect(host="localhost", port=3306, user="root",
                                       password="123456", database="jingdong", charset="utf8")
 
        # 返回 非空连接
        return cls.conn
 
    @classmethod
    def __close_conn(cls):
        # 判断,conn 不为空,需要关闭。 
        if cls.conn is not None:
            cls.conn.close()
            cls.conn = None # 防止:即使数据库连接已经关闭,cls.conn 依然会保持指向一个已关闭的连接对象。
2️⃣查询一条记录
# 封装数据库工具类
class DBUtil(object):
    # 常用方法:查询一条
    @classmethod
    def select_one(cls, sql):
        cursor = None
        res = None
        try:
            # 获取连接
            cls.conn = cls.__get_conn()
 
            # 获取游标
            cursor = cls.conn.cursor()
 
            # 执行查询语句
            cursor.execute(sql)
 
            # 提取一条结果
            res = cursor.fetchone()
 
        except Exception as err:
            print("查询sql错误:", str(err))
        finally:
            # 关闭游标
            cursor.close()
            # 关闭连接
            cls.__closeconn()
            # 将sql查询结果返回
            return res


if __name__ == '__main__':
    res = DBUtil.select_one("select * from goods")
    print("查询一条数据的结果:",res)


3️⃣增删改数据
class DBUtil(object):
    # 常用方法:增删改
    @classmethod
    def uid_db(cls, sql):
        cursor = None
        try:
            # 获取连接和游标
            cls.conn = cls.__getconn()
            cursor = cls.conn.cursor()

            # 执行uid语句
            cursor.execute(sql)
            print("影响的行数:", cls.conn.affected_rows())
            
            # 提交事务
            cls.conn.commit()

        except Exception as err:
            # 回滚事务
            cls.conn.rollback()
            print("UID操作失败:", str(err))
        finally:
            # 关闭游标和连接
            cursor.close()
            cls.conn.close()



if __name__ == '__main__':
    DBUtil.uid_db("insert into goods values (0,'数据库工具类封装测试英寸笔记本',1,1,'2999',default,default);")
4️⃣完整封装代码实现

 py数据库工具类封装Test07.py

import pymysql
class DBUtil(object):
    conn =None

    @classmethod        # 标明该方法为类方法,这样可以不用创建实例就可以调用方法
    def __getconn(cls): # __把该方法私有,只有类内部可以使用
        if cls.conn is None:
            cls.conn = pymysql.connect(host="localhost", port=3306, user="root",
                           password="123456", database="jingdong", charset="utf8")
        return cls.conn

    # 常用方法:查询一条
    @classmethod
    def __closeconn(cls):
        if cls.conn is not None:
            cls.conn.close()
            cls.conn = None

    @classmethod
    def select_one(cls,sql):
        cursor = None
        res = None
        try:
            cls.conn = cls.__getconn()
            cursor = cls.conn.cursor()

            cursor.execute(sql)
            res = cursor.fetchone()

        except Exception as err:
            print("查询操作失败:",str(err))


        finally:
            cursor.close()
            cls.__closeconn()
            return res


    @classmethod
    def uid_db(cls, sql):
        cursor = None
        try:
            cls.conn = cls.__getconn()
            cursor = cls.conn.cursor()

            cursor.execute(sql)
            print("影响的行数:", cls.conn.affected_rows())

            cls.conn.commit()
        except Exception as err:
            cls.conn.rollback()
            print("UID操作失败:", str(err))
        finally:
            cursor.close()
            cls.conn.close()





if __name__ == '__main__':
    # res = DBUtil.select_one("select * from goods")
    # print("查询一条数据的结果:",res)
    DBUtil.uid_db("insert into goods values (0,'数据库工具类封装测试英寸笔记本',1,1,'2999',default,default);")

 py使用数据库工具类.py

from py数据库工具类封装Test07 import DBUtil

res = DBUtil.select_one("select * from goods")
DBUtil.uid_db("delete from goods where id=24;")
print(res)


 

全部内容:

PyMysql 01|(包含超详细项目实战)连接数据库、增删改查、异常捕获-CSDN博客

PyMysql 01|(包含超详细项目实战)数据库工具类封装-CSDN博客 


http://www.kler.cn/a/472863.html

相关文章:

  • flink的EventTime和Watermark
  • 机器人技术:ModbusTCP转CCLINKIE网关应用
  • CDP集成Hudi实战-Hive
  • Web应用安全-漏洞扫描器设计与实现
  • JWT与Token
  • Django:构建高效Web应用的强大框架
  • 结构型模式4.装饰器模式
  • 枫清科技高雪峰: Data-Centric新范式开启,知识引擎+大模型双轮驱动企业智能化
  • Python里JSON orjson ujson在json.loads有什么区别?
  • 性能测试03|JMeter:断言、关联、web脚本录制
  • c++ 17 constexpr
  • conda+jupyter+pycharm:如何在Windows conda环境下运行jupyter并使用浏览器或者pycharm运行.ipynb
  • 开源一款简单易用的键盘音效工具
  • el-table 多级表头
  • 域名反查IP多种方式
  • 【Linux基础指令】第一期
  • 高频 SQL 50 题(基础版)_197. 上升的温度
  • cursor试用出现:Too many free trial accounts used on this machine 的解决方法
  • html 前端进行浮动布局设置
  • Go跨平台UI开发之wails的使用(1)
  • Lua语言的软件工程
  • 实现串口控制
  • 计算机网络 (31)运输层协议概念
  • JVM实战—11.OOM的原因和模拟以及案例
  • python代码实现了一个金融数据处理和分析的功能,主要围绕国债期货及相关指数数据展开
  • el-table表格合并某一列