python数据库连接池

本文介绍了一种使用Python实现MySQL数据库连接池的方法。通过Pymysql和DBUtils库,可以有效地管理和复用数据库连接资源,提高应用程序性能。文章提供了一个连接池配置示例,并展示如何通过连接池获取和释放数据库连接。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

import pymysql
from DBUtils.PooledDB import PooledDB, SharedDBConnection

POOL = PooledDB(
    creator=pymysql,  # 使用链接数据库的模块
    maxconnections=20,  # 连接池允许的最大连接数,0和None表示不限制连接数
    mincached=2,  # 初始化时,链接池中至少创建的空闲的链接,0表示不创建
    maxcached=5,  # 链接池中最多闲置的链接,0和None不限制
    maxshared=3,
    # 链接池中最多共享的链接数量,0和None表示全部共享。PS: 无用,因为pymysql和MySQLdb等模块的 threadsafety都为1,所有值无论设置为多少,_maxcached永远为0,所以永远是所有链接都共享。
    blocking=True,  # 连接池中如果没有可用连接后,是否阻塞等待。True,等待;False,不等待然后报错
    maxusage=None,  # 一个链接最多被重复使用的次数,None表示无限制
    setsession=[],  # 开始会话前执行的命令列表。如:["set datestyle to ...", "set time zone ..."]
    ping=4,
    # 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='123',
    database='pooldb',
    charset='utf8'
)


class SqlHelper(object):

    def open(self, ):
        self.conn = POOL.connection()
        self.cursor = self.conn.cursor()

    def close(self, ):
        self.cursor.close()
        self.conn.close()

    def __enter__(self, ):
        self.open()
        return self

    def fetchone(self, sql):
        self.cursor.execute(sql)
        result = self.cursor.fetchall()
        return result

    def fetchall(self, sql):
        self.cursor.execute(sql)
        result = self.cursor.fetchall()
        return result

    def __exit__(self, ):
        self.close()


with SqlHelper as db:
    db.fetchall("select * from tp_sys_user")

### Python 中实现数据库连接池的方法及库 #### 使用 DBUtils 库实现 MySQL 数据库连接池 DBUtils 是一套用于 Python数据库连接池包,能够对非线程安全的数据库接口进行线程安全包装。该库源自 Webware for Python 项目[^1]。 为了使用 `DBUtils` 创建一个简单的 MySQL 连接池,可以按照如下方式操作: ```python from dbutils.pooled_db import PooledDB import pymysql # 设置连接池参数 db_pool = PooledDB( creator=pymysql, # 使用 PyMySQL 作为数据库驱动 maxconnections=6, # 连接池最大数量 mincached=2, # 初始化时至少创建两个空闲连接 blocking=True, # 当连接数达到上限后是否阻塞等待 host='localhost', user='root', password='password', database='test' ) def get_connection(): """获取数据库连接""" conn = db_pool.connection() return conn ``` 此代码片段展示了如何配置并初始化一个基于 `PooledDB` 类型的对象来管理多个到 MySQL 数据库的持久化连接实例。 #### 使用 pymysqlpool 实现 MySQL 数据库连接池 另一个可选方案是采用 `pymysqlpool` 工具包中的新版成员——旨在提供一种高效的数据库连接池机制以减少应用程序中频繁建立和断开数据库链接所带来的性能损耗[^2]。 下面是利用 `pymysqlpool` 构建 MySQL 连接池的一个例子: ```python from pymysqlpool.pool import Pool import pymysql config = { 'host': 'localhost', 'port': 3306, 'user': 'root', 'passwd': 'password', 'database': 'test' } # 定义连接池对象 connection_pool = Pool(host=config['host'], port=config['port'], user=config['user'], passwd=config['passwd'], db=config['database']) try: connection = connection_pool.get_conn() # 获取单个连接 finally: if connection is not None: connection.close() # 关闭连接返回给池子 ``` 上述示例说明了怎样通过定义特定于目标数据库服务器的信息字典以及调用相应方法完成连接池设置过程。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值