首页 > 数据库 >数据库连接池----DBUtils的使用

数据库连接池----DBUtils的使用

时间:2024-12-25 17:32:05浏览次数:9  
标签:cursor 数据库 连接数 ---- conn DBUtils 连接 连接池

  DBUtils 是一个用于管理数据库连接池的 Python 库,它提供了连接池的管理,可以避免每次进行数据库操作时都重新建立连接。通过 DBUtils,你可以更高效地管理数据库连接,尤其在高并发的情况下,能够有效减少创建和销毁连接的开销。DBUtils 支持多种数据库驱动,包括 MySQL、PostgreSQL、SQLite 等。

安装DBUtils

首先,使用 pip 安装 DBUtils:

pip install dbutils

使用 DBUtils 连接池

以下是一个如何使用 DBUtils 管理 MySQL 数据库连接池的简单示例。

import MySQLdb
from dbutils.pooled_db import PooledDB

# 创建数据库连接池
pool = PooledDB(
    creator=MySQLdb,    # 数据库驱动,使用 MySQLdb 连接 MySQL 数据库
    maxconnections=10,   # 连接池中允许的最大连接数
    mincached=2,         # 初始化时创建的空闲连接数
    maxcached=5,         # 连接池中空闲连接的最大数量
    maxshared=3,         # 连接池中共享连接的最大数目
    blocking=True,       # 如果没有可用连接时,是否阻塞等待
    host='localhost',    # 数据库主机地址
    user='your_username',# 数据库用户名
    passwd='your_password', # 数据库密码
    db='your_database',  # 数据库名
    port=3306            # 数据库端口
)

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

# 获取游标
cursor = conn.cursor()

# 执行查询操作
try:
    cursor.execute("SELECT * FROM your_table")
    result = cursor.fetchall()
    for row in result:
        print(row)
finally:
    cursor.close()  # 关闭游标
    conn.close()    # 将连接归还到连接池

代码解释

1.创建连接池:PooledDB 用来创建数据库连接池。它的参数如下:
  • creator:指定用于连接数据库的驱动库,通常是像 MySQLdb 或 pymysql 这样的数据库驱动。
  • maxconnections:连接池中的最大连接数。
  • mincached:连接池初始化时创建的空闲连接数。
  • maxcached:连接池中空闲连接的最大数量。
  • maxshared:最多允许共享的连接数。
  • blocking:如果连接池没有可用连接时,是否阻塞。True 表示阻塞,False 表示不阻塞。
2.获取连接: 使用 pool.connection() 从连接池获取一个数据库连接。
3.操作数据库: 使用连接创建游标 conn.cursor(),然后执行 SQL 语句来查询或修改数据库。
4.关闭游标和连接: 使用 cursor.close() 关闭游标,并且用 conn.close() 将连接归还给连接池,而不是实际关闭连接。

配置选项:

  • maxconnections:连接池中允许的最大连接数。如果连接池已满,则会阻塞直到有连接空闲出来(如果 blocking=True)。
  • mincached:连接池中最少的连接数。初始化时会创建这个数量的连接。如果池中有足够的连接,新的连接请求会直接使用空闲连接。
  • maxcached:连接池中最多空闲的连接数。如果超过这个数量,空闲的连接会被销毁。
  • maxshared:连接池中可以共享的最大连接数。在最大共享数达到时,其他请求会排队等待空闲连接。
  • blocking:如果 True,当连接池没有可用连接时,程序会阻塞,直到有连接可用。如果是 False,则会抛出异常。

使用 DBUtils 进行数据库操作

执行插入操作

conn = pool.connection()
cursor = conn.cursor()

try:
    cursor.execute("INSERT INTO your_table (col1, col2) VALUES (%s, %s)", ('value1', 'value2'))
    conn.commit()  # 提交事务
finally:
    cursor.close()
    conn.close()

执行更新操作

conn = pool.connection()
cursor = conn.cursor()

try:
    cursor.execute("UPDATE your_table SET col1 = %s WHERE col2 = %s", ('new_value', 'value2'))
    conn.commit()  # 提交事务
finally:
    cursor.close()
    conn.close()

异常处理

使用连接池时,可以通过异常处理来捕获数据库操作中的错误:

try:
    conn = pool.connection()
    cursor = conn.cursor()
    cursor.execute("SELECT * FROM your_table")
    result = cursor.fetchall()
    for row in result:
        print(row)
except Exception as e:
    print(f"An error occurred: {e}")
finally:
    cursor.close()
    conn.close()

优点

  • 提高性能:避免了每次数据库操作都建立和关闭连接的开销。
  • 减少资源消耗:数据库连接是昂贵的资源,连接池可以重用已建立的连接,减少了连接的数量。
  • 自动管理:DBUtils 自动管理连接池,帮助你方便地处理连接的获取和归还。

总结

DBUtils 是一个非常方便的库,可以帮助你在 Python 中高效地管理数据库连接池。通过合理配置连接池的大小、空闲连接数和最大连接数,可以有效提升数据库操作的性能和资源利用率。对于高并发的爬虫、Web 应用等项目非常有用。

标签:cursor,数据库,连接数,----,conn,DBUtils,连接,连接池
From: https://blog.csdn.net/chen626721/article/details/144723823

相关文章

  • AI 代码生成:原理、应用、局限与未来趋势全解析
    一、AI写代码的原理基于深度学习的代码生成:深度学习模型(如GPT系列)通过大规模代码数据集训练,将代码视为一种序列数据。在训练过程中,它们会学习代码中的各种模式和规律,包括但不限于编程语言的语法规则、不同代码结构的组合方式、代码块之间的依赖关系以及各种函数和库的使用......
  • 「数据结构课程设计」二叉排序树与文件操作
    功能要求:(1)从键盘输入一组学生记录建立二叉排序树;(2)中序遍历二叉排序树;(3)求二叉排序树深度;(4)求二叉排序树的所有节点数和叶子节点数;(5)向二叉排序树插入一条学生记录;(6)从二叉排序树中删除一条学生记录;(7)从二叉排序树中查询一条学生记录;(8)以广义表的形式输出二叉排序树该文件也......
  • 【Unity 低多边形3D角色资源包】Low Poly Characters 提供多种低多边形风格的角色,包括
    LowPolyCharacters是一款专为需要低多边形风格角色的游戏开发者设计的3D角色资源包。该资源包提供了多种低多边形风格的角色,包括各种职业、性别、种族的角色设计,适合用于多种类型的游戏,尤其是需要卡通或简洁艺术风格的项目。通过简单、精致的建模和材质设计,开发者可以快......
  • 增加一个表格新增行时的校验demo
    效果图,在新增行时增加空值判断,如果有空值不允许新增行 vue2代码示例<template><divclass="home"><el-form:model="form"ref="form":rules="rules"><el-table:data="form.tableData"styl......
  • Go 语言实现,将 SQL Server 中每个表的大小信息传输到 Prometheus
    为了用Go语言编写一个程序,将SQLServer中每个表的大小信息传输到Prometheus,你可以遵循以下步骤。这个过程包括连接到SQLServer、执行查询获取表大小数据,并使用Prometheus客户端库将这些数据暴露给Prometheus抓取。步骤1:设置项目环境首先,确保你已经安装了Go和必要......
  • 深度学习笔记(2)
    自监督学习DownstreamTask下游任务:评估任务(分类、目标检测、语义分割等),即建立在预训练模型之上的具体应用任务PretextTask:对目标任务有帮助的辅助任务自监督学习主要是利用辅助任务(Pretext)从大规模的无监督数据中挖掘自身的监督信息,通过这种构造的监督信息对网络进......
  • 深度解读:20 款常见 AI 代码生成工具,从功能特性到优劣势,全面掌握编程得力助手
    GitHubCopilot:由GitHub和OpenAI合作开发,基于GPT架构。集成到多种开发环境中,如VisualStudioCode、JetBrainsIDE等。根据用户输入的注释或部分代码自动生成代码补全建议,适用于多种编程语言,如Python、JavaScript、Java等。优点:可以快速生成大量常用代码片段,例......
  • 【Unity 3D 工人角色资源包】Line Worker 提供了多个低多边形风格的工人角色模型,适用
    LineWorker是一款专为需要工人角色的游戏开发者设计的3D角色资源包。该资源包提供了多个低多边形风格的工人角色模型,适用于建筑工地、城市建设、维修和其他类似主题的游戏。每个角色都经过精心设计,具有鲜明的个性和细节,能够为游戏世界增添生动的角色元素。该资源包特别适......
  • 这个安装文件包,运行SETUP,报错,怎么解决?
    大家好,我是Python进阶者。一、前言前几天在Python最强王者交流群【小歌】问了一个Python代码调试的问题。问题如下:SETUP.Py在notebook条件下运行,报错信息,谁能指导下不?:)二、实现过程这里【瑜亮老师】给了一个指导,如下所示:@小歌 报错说没找到那个txt文件,你用绝对路径应该就......
  • RocketMQ
    消息中间件:功能:异步与解耦流量削峰:数据分发:普通消息同步发送:1.实例化消息生产者Producer2.设置NameServer的地址3.启动Producer实例3.1创建消息,指定Topic,Tag和消息体·3.2发送消息到Broker4.若不再发送消息,关闭Producer实例适用于:消息通知,短信通知异步发送:1......