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

python的数据库连接池包 DBUtils
DBUtils是一套Python数据库连接池包,并允许对非线程安全的数据库接口进行线程安全包装。DBUtils来自Webware for Python
DBUtils提供两种外部接口:
* PersistentDB :提供线程专用的数据库连接,并自动管理连接。
* PooledDB :提供线程间可共享的数据库连接,并自动管理连接。
下载地址:https://pypi.python.org/pypi/DBUtils/   下载解压后,使用python setup.py install 命令进行安装
或者使用
pip install DBUtils
mysql 数据库之连接池技术-LMLPHP

实例代码如下

点击(此处)折叠或打开

  1. #!/usr/bin/env python
  2. # -*- coding:utf-8 -*-
  3. # Author :Alvin.xie
  4. # @Time :2017-11-21 16:55
  5. # @file :sqlljc.py


  6. import MySQLdb
  7. from DBUtils.PooledDB import PooledDB


  8. db_config = {
  9.     "host": "10.89.1.10",
  10.     "port": 3306,
  11.     "user": "demo",
  12.     "passwd": "123qaz",
  13.     "db": "python",
  14.     "charset": "utf8"
  15. }

  16. pool = PooledDB(MySQLdb, 5, **db_config)

  17. if __name__ == '__main__':
  18.     cnx = pool.connection()
  19.     cus = cnx.cursor()
  20.     SQL = "select * from tmp;"
  21.     try:
  22.         cus.execute(SQL)
  23.         result = cus.fetchall()
  24.         print (result)
  25.         cus.close()
  26.         cnx.commit()
  27.     except Exception as e:
  28.         raise e
  29.     finally:
  30.         cnx.close()
mysql 数据库之连接池技术-LMLPHP
PooledDB的参数:
1. mincached,最少的空闲连接数,如果空闲连接数小于这个数,pool会创建一个新的连接
2. maxcached,最大的空闲连接数,如果空闲连接数大于这个数,pool会关闭空闲连接
3. maxconnections,最大的连接数,
4. blocking,当连接数达到最大的连接数时,在请求连接的时候,如果这个值是True,请求连接的程序会一直等待,直到当前连接数小于最大连接数,如果这个值是False,会报错。
5. maxshared 当连接数达到这个数,新请求的连接会分享已经分配出去的连接
   在uwsgi中,每个http请求都会分发给一个进程,连接池中配置的连接数都是一个进程为单位的(即上面的最大连接数,都是在一个进程中的连接数),而如果业务中,一个http请求中需要的sql连接数不是很多的话(其    实大多数都只需要创建一个连接),配置的连接数配置都不需要太大。

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

1.在程序创建连接的时候,可以从一个空闲的连接中获取,不需要重新初始化连接,提升获取连接的速度
2.关闭连接的时候,把连接放回连接池,而不是真正的关闭,所以可以减少频繁地打开和关闭连接


09-17 18:20