美文网首页
python操作mysql数据库的精美实用模块(升级版)

python操作mysql数据库的精美实用模块(升级版)

作者: 一心狮 | 来源:发表于2023-07-29 00:24 被阅读0次

    写在前面

    之前,给大家分享过一个我自己写的实用模块:《python操作mysql数据库的精美实用模块》

    这个模块,我自己也一直在用的,没出过什么BUG。但其实,这个代码,也一直存在着一个不太优雅的问题——

    就是对数据库进行了频繁地创建连接和销毁连接,这减慢了操作时间,也消耗了服务器内存。

    最近,看到了 数据库连接池技术,其实这个技术理解起来也很简单,所以果断对自己的代码了进行升级。

    当然,之前的《python操作mysql数据库的精美实用模块》也并非完全无用武之地了,就像我手上其中一个项目,因为之前整体构架的问题,偏偏就用不上数据库连接池技术,上了反而会出问题。

    凡事都有利有弊,大家都需要根据自己项目的情况,对应选择运用合适自己项目的技术。

    数据库连接池技术

    好了,正式介绍下这个技术:

    连接池是一种常见的数据库优化技术,它可以减少数据库连接的开销,提高程序性能。

    连接池的基本思想是在程序启动时,创建一定数量的数据库连接,并保存在一个容器中。

    当程序需要访问数据库时,从容器中获取一个空闲的连接,使用完毕后,将连接归还到容器中,而不是关闭连接。

    DBUtils 库

    DBUtils 是一个常用的 Python 的第三方数据库连接池库,支持多种数据库,包括 MySQL、PostgreSQL、SQLite 等。

    网上相关资料,也是比较丰富的,如需详细了解,大家自行搜索资料吧。

    这里按照我的风格惯例,给大家直接上我自己写好的实用模块,方便拿走即用。

    其中,我的初代版《python操作mysql数据库的精美实用模块》也已经改为类实现了,这次一起奉上。

    python操作mysql数据库的精美实用模块—— DBUtils连接池版

    import pymysql
    from dbutils.pooled_db import PooledDB
    #############################################################################################
    # 连接mysql数据库-----使用数据库连接池技术----dbutils库
    #############################################################################################
    db_pool = PooledDB(
        creator=pymysql,  # 使用链接数据库的模块
        maxconnections=800,  # 连接池允许的最大连接数,0和None表示不限制连接数
        mincached=8,  # 初始化时,链接池中至少创建的空闲的链接,0表示不创建
        blocking=True,  # 连接池中如果没有可用连接后,是否阻塞等待。True,等待;False,不等待然后报错
        maxusage=None,  # 一个链接最多被重复使用的次数,None表示无限制
        setsession=[],  # 开始会话前执行的命令列表。如:["set datestyle to ...", "set time zone ..."]
        ping=0,   # ping MySQL服务端,检查是否服务可用。# 如:0 = None = never, 1 = default = whenever it is requested, 2 = when a cursor is created, 4 = when a query is executed, 7 = always
    
        host='127.0.0.1',
        port=3306,
        user='root'
        password='root',
        database='mydbdemo',
        charset='utf8'
    )
    
    
    
    class DBManager():
        # 创建数据库连接
        def __init__(self):
            self.db = db_pool.connection()
    
        # 关闭数据库连接
        def closeDB(self):
            self.db.close()
    
    
        #连接数据库,执行插入SQl
        def executeQueryID(self,sqlstring):
            try:
                cursor = self.db.cursor()
                cursor.execute(sqlstring)
                self.db.commit()
                the_id = int(cursor.lastrowid)
                #the_id = int(db.insert_id())
                return the_id
            except Exception:
                return False
            finally:
                self.db.close()  # 关闭数据库连接
    
    
    
    
        # 连接数据库,执行SQl,无返回
        def executeQueryNO(self, sqlstring):
            try:
                cursor = self.db.cursor()
                cursor.execute(sqlstring)
                self.db.commit()
                return True
            except Exception:
                self.db.rollback()
                return False
            finally:
                self.db.close()  # 关闭数据库连接
    
    
        #连接数据库,执行SQL,返回单条数据
        def executeQueryone(self, sqlstring):
            try:
                cursor = self.db.cursor()
                cursor.execute(sqlstring)
                dataone = cursor.fetchone()
                return dataone
            except Exception:
                return False
            finally:
                self.db.close()  # 关闭数据库连接
    
        #连接数据库,执行SQL,返回多条数据
        def executeQueryall(self, sqlstring):
            try:
                cursor = self.db.cursor()
                cursor.execute(sqlstring)
                dataall = cursor.fetchall()
                return dataall
            except Exception:
                return False
            finally:
                self.db.close()  # 关闭数据库连接
    
    
    
    
    
    

    python操作mysql数据库的精美实用模块—— 原版改用类实现

    ##############################################################################################
    # 连接mysql数据库
    #############################################################################################
    class DBManager_Old():
        # 创建数据库连接
        def __init__(self):
            db_config = ConfigManager.get_db_config()
            self.db = pymysql.Connect(
            host='127.0.0.1',
            port=3306,
            user='root',
            passwd='root',
            db='mydbdemo',
            charset='utf8')
    
        # 关闭数据库连接
        def closeDB(self):
            self.db.close()
    
        #连接数据库,执行插入SQl
        def executeQueryID(self,sqlstring):
            try:
                cursor = self.db.cursor()
                cursor.execute(sqlstring)
                self.db.commit()
                the_id = int(cursor.lastrowid)
                #the_id = int(db.insert_id())
                return the_id
            except Exception:
                return False
            finally:
                self.db.close()  # 关闭数据库连接
    
    
    
    
        # 连接数据库,执行SQl,无返回
        def executeQueryNO(self, sqlstring):
            try:
                cursor = self.db.cursor()
                cursor.execute(sqlstring)
                self.db.commit()
                return True
            except Exception:
                self.db.rollback()
                return False
            finally:
                self.db.close()  # 关闭数据库连接
    
    
        #连接数据库,执行SQL,返回单条数据
        def executeQueryone(self, sqlstring):
            try:
                cursor = self.db.cursor()
                cursor.execute(sqlstring)
                dataone = cursor.fetchone()
                return dataone
            except Exception:
                return False
            finally:
                self.db.close()  # 关闭数据库连接
    
        #连接数据库,执行SQL,返回多条数据
        def executeQueryall(self, sqlstring):
            try:
                cursor = self.db.cursor()
                cursor.execute(sqlstring)
                dataall = cursor.fetchall()
                return dataall
            except Exception:
                return False
            finally:
                self.db.close()  # 关闭数据库连接
    
    

    写在最后

    所以,你看,大家平时学习或开发时,发现更好更合适的技术或方法,就要积极去升级自己项目的代码,这就是所谓的重构。

    《程序员修炼之道》有言:尽早重构,经常重构。

    重构的思想精髓,就是不断地去升级项目的代码,同时,这个过程也在不断地修炼自己的技术。

    其实,代码需要重构,整个项目也需要重构,我们的能力也需要重构,我们的人生也需要重构。

    重构,不是推倒重来,是在现有的基础上,一步一步,不断去升级,去变得更好。

    这其实就是修炼啊,人生本就是一场修炼。

    这就是我理解的重构。

    相关文章

      网友评论

          本文标题:python操作mysql数据库的精美实用模块(升级版)

          本文链接:https://www.haomeiwen.com/subject/hlvdpdtx.html