Python 使用 PyMysql、DBUtils 创建连接池提升性能

yizhihongxing

标题:Python 使用 PyMysql、DBUtils 创建连接池提升性能

背景

Python 是一门流行的编程语言,在访问数据库时使用 PyMySQL 可以很方便的实现数据的增、删、改、查。然而,在高并发场景下,每次都建立连接的方式效率低下,因此需要使用连接池技术。

连接池介绍

连接池是一组已经建立好的数据库连接对象集合,连接池在项目启动后就预先创建好,当需要访问数据库时,就直接从连接池里获取一个连接对象,节约了每次创建连接的时间。

PyMySQL 和 DBUtils

PyMySQL 是 Python 语言操作 MySQL 数据库的库,是在 Python3 里面用来连接 MySQL 服务器的一个库。DBUtils 是 Python 数据库连接池的一个库,它建立在 PyMySQL 之上,旨在提高大并发下的数据库连接效率。PyMySQL 和 DBUtils 都可以独立使用,但结合使用会更加方便。

示例 1

下面是一个使用 PyMySQL 和 DBUtils 来创建连接池的示例代码:

import pymysql
from dbutils.pooled_db import PooledDB

class DBHelper():
    def __init__(self, host, port, user, password, db_name, charset='utf8'):
        self.pool = PooledDB(
            creator=pymysql,
            maxconnections=6,  # 连接池允许的最大连接数,0 和 None 的意思一样都是不限制连接数
            mincached=2, # 初始化时,连接池中至少创建的空闲的连接,0 代表不创建
            maxcached=5, #连接池中最多闲置的连接数,0 和 None 的意思一样,都表示不闲置
            maxshared=3,
            blocking=True, # 连接池中如果没有可用连接后,是否阻塞等待,True 表示等待,否则不等待直接报错
            setsession=[], # 用于传递到数据库的额外参数
            ping=0,
            host=host,
            port=port,
            user=user,
            password=password,
            database=db_name,
            charset=charset
        )

    def get_conn(self):
        return self.pool.connection()

    def close(self, conn, cur):
        #释放资源
        cur.close()
        conn.close()

在创建 DBHelper 对象时,就会创建好连接池。使用 get_conn() 函数获取连接对象,使用 close() 函数释放资源。

示例 2

下面是一个使用连接池的简单示例:

db = DBHelper('127.0.0.1', 3306, 'root', '123456', 'test')
conn = db.get_conn()
cur = conn.cursor()
cur.execute("SELECT * FROM user")
results = cur.fetchall()
for row in results:
    print(row)
db.close(conn, cur)

以上代码中,通过 DBHelper 对象获取连接对象,然后使用这个连接对象进行执行 SQL 语句。最后使用 DBHelper.close() 函数释放资源。

小结

使用连接池可以大幅度提高服务的性能,通过参考上述示例代码,可以很方便地使用 PyMySQL 和 DBUtils 来创建连接池,并提高数据库操作的效率。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Python 使用 PyMysql、DBUtils 创建连接池提升性能 - Python技术站

(0)
上一篇 2023年6月6日
下一篇 2023年6月6日

相关文章

  • python发送邮件接收邮件示例分享

    Python发送邮件接收邮件完整攻略 一、发送邮件 1. 导入模块 首先,在代码中导入所需的模块:smtplib、email.mime.multipart、email.mime.text、email.mime.image。其中,smtplib模块提供SMTP邮件发送功能,email.mime.multipart、email.mime.text及email.m…

    python 2023年5月20日
    00
  • python Matplotlib底图中鼠标滑过显示隐藏内容的实例代码

    我来为你讲解一下“Python Matplotlib底图中鼠标滑过显示隐藏内容的实例代码”的攻略: 一、实现原理 在 Matplotlib 中,我们可以使用 mplcursors 模块来实现鼠标滑过显示隐藏内容的效果。这个模块会捕捉鼠标在底图中的位置并生成一个光标,在光标所在的位置显示我们指定的内容。当鼠标移动到另一个位置时,光标也会跟随移动。这个模块支持在…

    python 2023年5月18日
    00
  • 跟老齐学Python之字典,你还记得吗?

    当学习Python字典时,我们可以使用以下的攻略: 1. 字典的基本概念 Python中的字典是一种无序的键值对集合,其中的元素都是唯一的。字典使用大括号 {} 来表示,每个键值对使用冒号(:)分隔,相邻的键值对之间使用逗号(,)分隔。一个键值对表示为“键:值”。 示例1:创建一个字典 # 创建一个空字典 my_dict = {} # 添加键值对 my_di…

    python 2023年5月13日
    00
  • Python 中的lambda函数介绍

    关于Python中的lambda函数,我可以给您提供一个详细攻略,以增加大家对它的了解。 1. 什么是lambda函数 lambda函数,也称作匿名函数,是一种可以在一行内定义、声明并使用的小型函数。与def语句定义的函数不同,lambda函数不需要函数名、return语句以及函数定义。 lambda函数主要用于编写需要一次性使用的代码段,比如作为函数参数进…

    python 2023年6月3日
    00
  • 如何在Python中连接MySQL数据库?

    以下是如何在Python中连接MySQL数据库的完整使用攻略,包括导入模块、连接数据库、执行查询操作等步骤。提供了两个示例以便更好地理解如何连接MySQL。 步骤1:导入模块 在Python中,我们需要导入相应的模块连接数据库。以下是导入mysql-connector-python模块的基本语法: import mysql.connector 步骤2:连接数…

    python 2023年5月12日
    00
  • python list转dict示例分享

    在Python中,我们经常需要将列表(list)转换为字典(dict)。下面是两种常用的方法: 方法一:使用zip函数 我们可以使用Python内置函数zip()将两个列表合并为一个字典。其中,第一个列表中的元素作为字典的键(key),第二个列表中的元素作为字典的值(value)。下面是一个示例: keys = [‘a’, ‘b’, ‘c’] values …

    python 2023年5月13日
    00
  • Python中最大递归深度值的探讨

    单独讨论 Python 中最大递归深度的问题不太有意义。对于这个问题需要从 Python 如何处理递归函数开始,以及递归深度和计算机内存容量有何关系等方面来进行探讨。 Python 如何处理递归函数 Python 中的递归函数和其他语言一样,也是直接或间接调用自身。在一个递归函数中,每一次调用该函数都会在内存中产生一个对应的栈帧。一个栈帧包含这个函数的所有局…

    python 2023年6月3日
    00
  • Python中低维数组填充高维数组的实现

    Python中低维数组填充高维数组的实现可以通过NumPy库中的reshape函数或者newaxis关键字来实现。具体步骤如下: 确定高维数组的维度和形状。 创建低维数组并填充数据。 使用reshape函数将低维数组转换为高维数组。 或者在低维数组中使用newaxis关键字来添加新的维度。 下面是两个示例说明: 示例1:使用reshape函数填充高维数组 i…

    python 2023年6月6日
    00
合作推广
合作推广
分享本页
返回顶部