博客导语

新手写法:每次请求 connect + close,频繁创建销毁连接,性能极差、极易导致数据库连接爆满报错。连接池是企业项目必须使用的优化方案,复用数据库连接、大幅提升并发性能、稳定数据库连接数。


一、为什么需要连接池?

  1. 原生写法:每次查询都要建立TCP握手、权限校验、销毁连接,耗时极高

  2. 高并发场景会产生大量临时连接,瞬间打满 MySQL 最大连接数

  3. 连接池:程序启动预先创建一批连接,循环复用、不销毁


二、连接池核心参数说明

使用 Python 主流库:DBUtils

pip install DBUtils pymysql

三、数据库连接池完整实战代码

from dbutils.pooled_db import PooledDB
import pymysql

# 创建连接池(全局唯一)
pool = PooledDB(
    creator=pymysql,
    maxconnections=10,   # 最大连接数
    mincached=2,         # 最小空闲连接
    maxcached=5,         # 最大空闲连接
    host="localhost",
    user="root",
    password="123456",
    database="test_db",
    charset="utf8mb4"
)

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

# 执行SQL
cursor.execute("select * from user")
print(cursor.fetchall())

# 归还连接(不是关闭!)
cursor.close()
conn.close()

四、连接池核心原理

  • conn.close() 不再销毁连接,而是归还给连接池

  • 空闲连接重复利用,避免频繁创建销毁开销

  • 限制最大连接数,保护 MySQL 不会被打崩


五、生产使用规范

  1. 爬虫、后端接口、定时任务必须使用连接池

  2. 连接池全局单例创建,禁止多次实例化

  3. 根据服务器配置调整最大连接数,避免过小阻塞、过大雪崩

Logo

openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构

更多推荐