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

标题: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日

相关文章

  • 把django中admin后台界面的英文修改为中文显示的方法

    要把Django中admin后台界面的英文修改为中文,只需要在项目中安装中文语言包即可。下面是具体的操作步骤: 步骤一:安装中文语言包 在Django项目的根目录下,进入命令行,执行以下命令: pip install django-admin-lang-zh-cn 此时,Django会自动下载安装中文语言包。 步骤二:修改settings.py 在项目的se…

    python 2023年5月18日
    00
  • 2020年10款优秀的Python第三方库,看看有你中意的吗?

    2020年10款优秀的Python第三方库 Python是一门非常流行的编程语言,广泛应用于数据分析、机器学习、Web开发等领域。Python拥有非常丰富的第三方库,使得开发者可以快速构建复杂的应用程序。本文介绍了2020年10款优秀的Python第三方库,供开发者参考,其中有你中意的吗? 1. requests库 requests是一个Python第三方库…

    python 2023年5月13日
    00
  • Python调用shell命令常用方法(4种)

    以下是详细讲解“Python调用shell命令常用方法(4种)”的完整攻略,包含两个示例说明。 1. 使用os.system()函数 在Python,我们可以使用os.system()函数来调用shell命令。os.system()函数的法如下: os.system(command) 其中command参数是要执行的shell命令。 以下是一个使用os.sy…

    python 2023年5月14日
    00
  • 详解Python爬取并下载《电影天堂》3千多部电影

    详解Python爬取并下载《电影天堂》3千多部电影 0. 简介 本文主要介绍如何使用Python来爬取并下载电影天堂网站上的电影资源,包括如何从首页获取分类信息和对应的电影列表,如何从电影列表页获取详细的电影信息和下载链接,并使用迅雷进行自动下载。 1. 准备工作 在进行爬取之前,需要安装一些必要的Python库和工具: BeautifulSoup4: 用于…

    python 2023年5月14日
    00
  • python算法学习之桶排序算法实例(分块排序)

    下面是详细讲解“python算法学习之桶排序算法实例(分块排序)”的完整攻略,包含两个示例说明。 桶排序算法简介 桶算法是一种线性排序算法,它的基本思想是将数据分到有限数量的桶中,然后对每个桶中的数据进行排序,最后将所有桶中的数据依次取出,即可得到有序序列。桶排序算法适用于数据分布均的情况,时间复杂度为O(n)。 Python实现桶排序算法 下面是Pytho…

    python 2023年5月14日
    00
  • Python设置matplotlib.plot的坐标轴刻度间隔以及刻度范围

    下面是针对“Python设置matplotlib.plot的坐标轴刻度间隔以及刻度范围”的完整攻略: 1. 设置坐标轴刻度间隔 在matplotlib中,我们可以使用xticks和yticks函数来设置坐标轴的刻度。 对于xticks来说,我们可以使用以下两种方式来设置坐标轴刻度间隔: 方法 1: 使用xticks函数的ticks参数,该参数接受一个以列表形…

    python 2023年5月18日
    00
  • Python调用百度OCR实现图片文字识别的示例代码

    以下是Python调用百度OCR实现图片文字识别的详细攻略: 一、准备工作 1.1 注册百度云账户并创建应用 在百度云官网(https://cloud.baidu.com/)上注册一个账户,然后创建一个OCR应用。 1.2 安装Python SDK 百度云提供了Python SDK,我们可以通过pip下载并安装。 pip install baidu-aip …

    python 2023年5月18日
    00
  • Python中处理字符串的相关的len()方法的使用简介

    标题 Python中处理字符串的相关的len()方法的使用简介 正文 在Python中,字符串是一种不可变的类型,它是由字符组成的一种序列。对于字符串的处理,len()方法是一种非常常用的方法,它可以获取字符串的长度。本文将对Python中len()方法的使用进行详细介绍,包括基本用法、注意事项及示例。 基本用法 len()方法是Python内置的方法,用于…

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