天天看点

python 数据库连接池DBUtils0x00 简述0x01 摘要0x02 模块0x03 下载及安装0x04 SimplePooledDB0x05 SteadyDB0x06 PersistentDB0x07 PooledDB0x08 选择哪一个使用

python 数据库连接池DBUtils

  • 0x00 简述
  • 0x01 摘要
  • 0x02 模块
  • 0x03 下载及安装
    • 1、下载
    • 2、安装
  • 0x04 SimplePooledDB
  • 0x05 SteadyDB
  • 0x06 PersistentDB
  • 0x07 PooledDB
  • 0x08 选择哪一个使用

0x00 简述

本文主要对数据库连接池DBUtils的用户手册进行学习和翻译

DCUtils版本:1.3

python版本:3.7

原文地址:https://webwareforpython.github.io/DBUtils/UsersGuide.html

项目地址:https://github.com/WebwareForPython/DBUtils

0x01 摘要

DBUtils是一组Python模块,允许以安全有效的方式连接线程化的Python应用程序和数据库。DBUtils是以Webware for Python作为应用程序,PyGreSQL作为PostgreSQL数据库的适配器来编写的,但是它可以用于任何其他Python应用程序和符合DB-API 2的数据库适配器。

0x02 模块

DBUtils套件是作为一个Python包实现的,它包含两个模块子集,一个用于任意的DB-API 2模块,另一个用于经典的PyGreSQL模块。

Universal DB-API 2 variant

Universal DB-API 2 variant
SteadyDB.py Hardened DB-API 2 connections
PooledDB.py Pooling for DB-API 2 connections
PersistentDB.py Persistent DB-API 2 connections
SimplePooledDB.py Simple pooling for DB-API 2

Classic PyGreSQL variant

Classic PyGreSQL variant
SteadyPg.py Hardened classic PyGreSQL connections
PooledPg.py Pooling for classic PyGreSQL connections
PersistentPg.py Persistent classic PyGreSQL connections
SimplePooledPg.py Simple pooling for classic PyGreSQL

通用DB-API 2变体中模块的依赖关系如下图所示:

python 数据库连接池DBUtils0x00 简述0x01 摘要0x02 模块0x03 下载及安装0x04 SimplePooledDB0x05 SteadyDB0x06 PersistentDB0x07 PooledDB0x08 选择哪一个使用

经典的PyGreSQL版本中模块的依赖关系是类似的:

python 数据库连接池DBUtils0x00 简述0x01 摘要0x02 模块0x03 下载及安装0x04 SimplePooledDB0x05 SteadyDB0x06 PersistentDB0x07 PooledDB0x08 选择哪一个使用

0x03 下载及安装

1、下载

1、您可以从Python包索引中下载数据库实用程序的实际版本,网址是:

https://pypi.python.org/pypi/DBUtils

2、源码地址:

https://pypi.python.org/pypi/DBUtils

https://github.com/WebwareForPython/DBUtils

2、安装

1、如果您打算使用来自其他应用程序的数据库实用程序,而不是用于Python的Webware,建议您以通常的方式安装该包:

python setup.py install

2、pip安装

pip install DBUtils

3、作为用于Python子包的网络软件安装(插件)

如果您想使用数据库实用程序作为仅适用于网络框架的网络软件的补充,您应该将其作为网络软件插件安装:

python setup.py install-install-lib =/path/to/Webware

替换/path/to/Webware带有您的用于Python安装的Webware根目录的路径。如果还没有这样做,或者如果您想将数据库应用程序文档集成到网络软件文档中,您还需要运行网络软件安装程序:

cd path/to/Webware

python install.py

0x04 SimplePooledDB

DBUtils.SimplePooledDB是池数据库连接的一个非常基本的参考实现。它远没有常规的PooledDB模块那么复杂并且尤其缺乏故障处理能力。DBUtils.SimplePooledDB本质上与MiscUtils.DBPool很相似,都是作为python的网络软件。应该认为这是概念的展示,而不是应该投入生产的东西。

0x05 SteadyDB

DBUtils.SteadyDB是一个与数据库进行“硬化”链接的模块,它基于何DB-API 2数据库模块所建立的普通连接。当一个“硬化的”连接被关闭或数据库连接丢失,或者它被使用的频率超过了可选的使用限制时,它将在访问时透明地重新打开。

一个典型的例子,这是需要的是当数据库被重启,而应用程序仍在运行,并打开的连接到数据库,或当你的应用程序访问远程数据库的网络由防火墙和防火墙已经重启,失去了它的状态。

通常,你不会直接使用SteadyDB模块;它仅仅作为下面两个模块的基础,即PersistentDB和PooledDB。

0x06 PersistentDB

DBUtils.PersistentDB 使用任何数据库API 2数据库模块实现到数据库的稳定的、线程仿射的、持久的连接。

下图显示了使用时所涉及的连接层DBUtils.PersistentDB连接:

python 数据库连接池DBUtils0x00 简述0x01 摘要0x02 模块0x03 下载及安装0x04 SimplePooledDB0x05 SteadyDB0x06 PersistentDB0x07 PooledDB0x08 选择哪一个使用

每当一个线程第一次打开一个数据库连接时,将会打开一个到数据库的新连接,该连接将从现在开始用于这个特定的线程。当线程关闭数据库连接时,它仍然保持打开状态,以便下次同一线程请求连接时,可以使用这个已经打开的连接。当螺纹死亡时,连接将自动关闭。

简而言之:持久性数据库尝试回收数据库连接以提高线程化应用程序的整体数据库访问性能,但它确保连接不会在线程之间共享。

因此,持久性数据库即使底层的数据库应用编程接口模块在连接级别上不是线程安全的,它也能很好地工作,并且当其他线程改变数据库会话或执行跨多个SQL命令的事务时,它会消除问题。

0x07 PooledDB

DBUtils.PooledDB 使用anyDB-API 2数据库模块,实现到数据库的稳定、线程安全的高速缓存连接池,这些连接可以透明地重用

下图显示了使用时所涉及的连接层PooledDB连接:

python 数据库连接池DBUtils0x00 简述0x01 摘要0x02 模块0x03 下载及安装0x04 SimplePooledDB0x05 SteadyDB0x06 PersistentDB0x07 PooledDB0x08 选择哪一个使用

如图所示,PooledDB可以在不同的线程之间共享打开的数据库连接。如果您将连接池设置为正值,则默认情况下会发生这种情况maxshared基础数据库API 2在连接级别是线程安全的,但是您也可以请求不会在线程之间共享的专用数据库连接。除了共享连接池之外,您至少还可以建立一个连接池mincached最多maxcached每当线程请求专用数据库连接或共享连接池尚未满时将使用的空闲连接。当一个线程关闭一个不再共享的连接时,它将被返回到中间连接池,以便可以再次回收。

如果底层数据库应用编程接口模块不是线程安全的,线程锁将被用来确保PooledDB连接是线程安全的。因此,您不必担心这个问题,但是无论何时更改数据库会话或执行跨多个SQL命令的事务时,都应该小心使用专用连接。

0x08 选择哪一个使用

两者PersistentDB和PooledDB通过回收数据库连接来提高数据库访问性能,同时即使数据库连接中断也能保持稳定性。

那么你应该使用这两个模块中的哪一个呢?从以上解释可以清楚地看出持久性数据库如果您的应用程序保持经常使用数据库的线程数量不变,这将更有意义。在这种情况下,您将始终拥有相同数量的开放数据库连接。但是,如果您的应用程序频繁地启动和结束线程,那么使用它会更好PooledDB。后者还允许更多的微调,特别是如果您使用线程安全的数据库API 2模块。

由于这两个模块的接口是相似的,你可以很容易地从一个模块切换到另一个模块,并检查哪一个更适合。