Python 编程中可以使用 PyMysql 进行数据库的连接及诸如查询/插入/更新等操作,但是每次连接 MySQL 数据库请求时,都是独立的去请求访问,相当浪费资源,而且访问数量达到一定数量时,对 mysql 的性能会产生较大的影响。因此,实际使用中,通常会使用数据库的连接池技术,来访问数据库达到资源复用的目的。

解决方案:DBUtils

DBUtils 是一套 Python 数据库连接池包,并允许对非线程安全的数据库接口进行线程安全包装。DBUtils 来自 Webware for Python 。

原理:

在程序创建连接的时候,可以从一个空闲的连接中获取,不需要重新初始化连接,提升获取连接的速度

关闭连接的时候,把连接放回连接池,而不是真正的关闭,所以可以减少频繁地打开和关闭连接

例子

importpymysqlfrom DBUtils.PooledDB importPooledDB

pool= PooledDB(pymysql,5,host='ip',user='user',passwd='passwd',db='db',port=3306,setsession=['SET AUTOCOMMIT = 1']) #5为连接池里的最少连接数,setsession=['SET AUTOCOMMIT = 1']是用来设置线程池是否打开自动更新的配置,0为False,1为True

conn= pool.connection() #以后每次需要数据库连接就是用connection()函数获取连接就好了

cur=conn.cursor()

SQL="select * from table"count=cur.execute(SQL)

results=cur.fetchall()

cur.close()

conn.close()

PooledDB 的参数:

POOL = PooledDB(

creator=pymysql, # 使用链接数据库的模块

maxconnections=6, # 连接池允许的最大连接数,0和None表示不限制连接数

mincached=2, # 初始化时,链接池中至少创建的空闲的链接,0表示不创建

maxcached=5, # 链接池中最多闲置的链接,0和None不限制

maxshared=1, # 链接池中最多共享的链接数量,0和None表示全部共享。PS: 无用,因为pymysql和MySQLdb等模块的 threadsafety都为1,所有值无论设置为多少,_maxcached永远为0,所以永远是所有链接都共享。

blocking=True, # 连接池中如果没有可用连接后,是否阻塞等待。True,等待;False,不等待然后报错

maxusage=None, # 一个链接最多被重复使用的次数,None表示无限制

setsession=[], # 开始会话前执行的命令列表。如:[“set datestyle to …”, “set time zone …”]

ping=0,

# ping MySQL服务端,检查是否服务可用。

# 如:0 = None = never,

# 1 = default = whenever it is requested,

# 2 = when a cursor is created,

# 4 = when a query is executed,

# 7 = always

host=‘127.0.0.1’,

port=3306,

user=‘root’,

password=’’,

database=‘ziji’,

charset=‘utf8’

)

在 uwsgi 中,每个 http 请求都会分发给一个进程,连接池中配置的连接数都是一个进程为单位的(即上面的最大连接数,都是在一个进程中的连接数),而如果业务中,一个 http 请求中需要的 sql 连接数不是很多的话(其实大多数都只需要创建一个连接),配置的连接数配置都不需要太大。

连接池对性能的提升表现在:

在程序创建连接的时候,可以从一个空闲的连接中获取,不需要重新初始化连接,提升获取连接的速度

关闭连接的时候,把连接放回连接池,而不是真正的关闭,所以可以减少频繁地打开和关闭连接

python调用libs.dbutil_Python 使用 PyMysql、DBUtils 创建连接池,提升性能相关推荐

  1. DBUtils、连接池

    1.DBUtils 它是JDBC的简化开发工具包 需项目导入commons-dbutils-1.6.jar 3个核心功能: QuerryRunner:提供对SQL语句操作的API ResultSetH ...

  2. [Day30] DBUtils和连接池

    1. DBUtils-JDBC的简化开发工具包 1.1 概述 DBUtils是java编程中的数据库操作实用工具,小巧简单实用. DBUtils封装了对JDBC的操作,简化了JDBC操作,可以少写代码 ...

  3. java beanlisthandler_Java篇-DBUtils与连接池

    一 : DBUtils DBUtils就是为了简化JDBC的快发而产生的开发工具包.对JDBC的一种封装. 核心功能 1. QueryRunner 中提供对sql语句操作的API update(Con ...

  4. 多线程情况下创建连接池

    JAVA数据库连接池实现 博客分类: • 数据库连接池 JAVA数据库连接池连接池原理连接池实现JAVA连接池 连接池的管理用了了享元模式,这里对连接池进行简单设计. 一.设计思路 1.连接池配置属性 ...

  5. nodejs mysql 创建连接池

    用Nodejs连接MySQL 从零开始nodejs系列文章,将介绍如何利Javascript做为服务端脚本,通过Nodejs框架web开发.Nodejs框架是基于V8的引擎,是目前速度最快的Javas ...

  6. python调用ping命令_我可以创建一个脚本来测试是否可以在python服务器上远程使用SSH和PING命令吗? - python...

    我可以创建脚本来测试是否可以在python中远程使用服务器上的SSH和PING命令吗? 参考方案 好的,这是Python3和Linux的示例.只需记住,您的目标主机/服务器必须正在运行SSH服务器才能 ...

  7. 解决新版DBUtils使用连接池from DBUtils.PooledDB import PooledDB报错

    解决方法 将下面的代码: from DBUtils.PooledDB import PooledDB import pymysqlpool = PooledDB(pymysql, 5, **{&quo ...

  8. Cannot create PoolableConnectionFactory。创建连接池异常

    错误信息:Cannot create PoolableConnectionFactory (Io 异常: The Network Adapter could not establish the con ...

  9. python mysql dbutil_python环境测试MySQLdb、DBUtil、sqlobject性能

    首先介绍下MySQLdb.DBUtil.sqlobject: (1)MySQLdb 是用于Python连接Mysql数据库的接口,它实现了 Python 数据库 API 规范 V2.0,基于 MySQ ...

最新文章

  1. Java中的等待/通知机制(wait/notify)
  2. redis和memecache有什么区别?
  3. 你们需要客户端吗?大话软件企业的营销(上)
  4. Jenkins 无法捕获构建脚本错误问题
  5. 检测到磁盘可能为uefi引导_【可QQ无偿协助】无法安装windows 因为这台电脑的磁盘布局不受UEFI固件支持...
  6. 通过源码分析MyBatis的缓存
  7. 1476D. Journey
  8. 外媒:已有5家芯片厂商获准继续向华为供货
  9. 吉林大学研究生课程-面向对象方法2020考试复习资料
  10. 理解JS散度(Jensen–Shannon divergence)
  11. php7 ob get contents,关于ob_get_contents(),ob_end_clean(),ob_start(),的具体用法详解
  12. java import imageio_是否可以使用Java ImageIO从InputStream读取多个...
  13. 企业应该怎么运营微信公众号?
  14. 【51nod】---1278 相离的圆(二分排序)
  15. Usually, this means that the Expanded widget has the wrong ancestor RenderObjectWidget. Typically, E
  16. spring源码之Mybatis扫描器
  17. 小王带你了解如何配置静态ip
  18. osgEarth编译
  19. 数据结构与算法之排序(Java版)
  20. python列表是什么数据结构_Python之数据结构:列表

热门文章

  1. php手机底部菜单,html5手机web页面底部菜单
  2. linux解压实例,linux 下面压缩,解压.rar文件以及rar,unrar实例
  3. intel219网卡的linux驱动,ubuntu16.04安装I219-V网卡驱动问题解决方法(示例代码)
  4. html 文件上传_某平台存在多处任意文件上传
  5. linux 添加动态链接库路径
  6. ajax回调函数ifelse,实现AJAX及用Promise解决回调函数命名问题
  7. linux没有交换分区会怎样,linux – 服务器拒绝使用交换分区
  8. ajax可以在localhost上用吗_你还不知道跨域问题是怎样造成的吗?
  9. mybatis sql标签_这谁顶得住?Mybatis 十八连环问
  10. linux 天堂测试软件,[Ubuntu] HTTP Live Streaming 安装测试