Python DBUtils库使用指南

       DBUtils库是一个用于数据库连接管理的工具,可显著提升数据库访问效率,能减少连接创建开销,提高性能,确保线程安全,尤其适用于Web应用、多线程环境等场景。它主要包括PersistentDB和PooledDB两个模块。PersistentDB是为每个线程保持一个持久数据库连接,而PooledDB则用于维护一个连接池,所有线程共享。本文将详细介绍其用法。

DBUtils库的安装

可以直接使用pip install安装DBUtils库:

pip install DBUtils

PersistentDB模块

PersistentDB模块为每个线程维护一个持久连接,当线程首次请求时创建,之后复用。线程结束后自动关闭,适合线程隔离环境。

连接池配置

以MySQL为例,其配置方法如下:

persistent_pool = PersistentDB(
    creator=pymysql,
    host='localhost',
    user='root',
    password='yourpassword',
    database='test'
)

不同的数据库需要不同的驱动,比如MySQL使用PyMySQL,PostgreSQL使用psycopg2,请根据实际情况选择驱动,下同。

另外,还有两个参数:

  • maxusage:单连接最大复用次数,默认值为0,即不限制

  • setsession: 初始化SQL命令(如设置时区),默认值为None

示例

def dosomething():
    # 每个线程首次调用时创建连接
    conn = persistent_pool.connection()
    # CURD操作,省略

    conn.close() 

需要注意的是,当调用conn.close()时,连接并不会真的关闭,而是等待线程结束,当线程结束时自动关闭。

PooledDB模块

PooledDB是维护一个连接池,所有线程共享,并能确保同一连接在同一时间只被一个线程使用。当线程请求连接时从池中分配连接,使用后归还。

连接池配置

以MySQL为例,其配置方法如下:

from dbutils.pooled_db import PooledDB
import pymysql

pool = PooledDB(
    creator=pymysql, 
    maxconnections=10,
    mincached=2,
    host='localhost',
    user='root',
    password='yourpassword',
    database='test',
    charset='utf8mb4'
)

其中,  maxconnections为最大连接数,mincached为初始空闲连接数。

另外,还有三个参数:

  • maxusage:单连接最大复用次数,默认值为0,即不限制

  • setsession: 初始化SQL命令(如设置时区),默认值为None

  • reset:每次归还连接后回滚未提交事务

示例

# 从连接池获取连接
conn = pool.connection()
cursor = conn.cursor()

# 查询
cursor.execute("SELECT * FROM users WHERE id = %s", (1,))
result = cursor.fetchall()
print(result)

# 关闭资源,将连接归还到连接池
cursor.close()
conn.close()

事务管理

PersistentDB和PooledDB都支持事务管理,因为它们提供的是标准的数据库连接对象。

示例

conn = pool.connection()
try:
    with conn.cursor() as cursor:
        cursor.execute("UPDATE users SET name = 'Tom' WHERE id = 1")
        cursor.execute("UPDATE users SET name = 'JACK' WHERE id = 2")
    conn.commit()
except Exception as e:
    conn.rollback()
    print("Error:", e)
finally:
    conn.close()

码字不易,原创更不易,如您觉得本文对您有帮助,麻烦动动您富贵的小手,点赞、收藏、关注、订阅!!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

QMT量化交易

您的鼓励是我创作的最大动力!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值