从本期开始知识点讲以思维导图的形式给出,内容点会按照讲解-应用-展示的形式体现,这样会更清晰些。

测试开发【提测平台】分享9-DBUntils优化数据连接&实现应用搜索和分页功能-LMLPHP

DBUntils连接池

在项目中链接数据是直接通过pymysql去做的链接请求关闭,每次操作都要独立重复请求,其实是比较浪费资源,在并发不大的小项目虽然无感知,但如果有频繁请求的项目中,就会有性能问题,那么可以通过使用连接池技术,管理来进行优化,DBUnitls是一套Python的数据库连接池包,对链接对象进行自动链接和释放,提高高频高并发下数据访问性能,大概的原理如:

测试开发【提测平台】分享9-DBUntils优化数据连接&实现应用搜索和分页功能-LMLPHP

DBUntils 按照配置初始化多个数据库连接存储在连接池中

  • 在程序创建连接的时候,从空闲的连接池中获取,不需要重新初始化连接,提升链接速度;

  • 在程序使用完毕后,把连接放回连接池,并不真正的关闭,等待其他请求使用,减少频繁数据的打开和关闭操作。

DBUntils 提供两种方式,并都能自动管理

  • PersistentDB (persistent_db)  提供线程专用的连接

  • PooledDB (pooled_db)  提供线程间可共享的连接

官方 [注解-1] 给出的示意图如下,仅够参考下,不进行扩展

测试开发【提测平台】分享9-DBUntils优化数据连接&实现应用搜索和分页功能-LMLPHP

使用此功能需要安装依赖

pip install DBUtils

一般比较常用就是共享的方式,以 pooled_db为例子,使用方法很简单

import pymysql
from dbutils.pooled_db import PooledDB
# 初始化数据库连接,使用pymysql连接,
pool = PooledDB(pymysql,3,host='',port='',user='',passwd='',database='')

# 一般连接
db = pool.connection()
cur = db.cursor()
cur.execute(...)
res = cur.fetchone()
cur.close() # 关闭使用游标
db.close() # 关闭使用连接

# 或者通过with方式
with pool.connection() as db:
  with db.cursor as cur:
       cur.execute(...)
       res = cur.fetchone()
09-13 10:29