Python学习一:基于DBUtils和pymysql的MySQL数据库连接池封装
2016-11-25 17:37
621 查看
前言
Python安装及配置略,本文前默认已经配置好Python环境。打开cmd,输入python,出现以下画面表示Python安装成功。
需要库
1、DBUtils 下载地址:DBUtils2、pymysql 下载地址:pymysql
说明:DBUtils 暂时不支持Python3
下载解压后,cmd进入库根目录,执行 :python setup.py install 进行安装。
另外可以使用pip命令在线安装,打开cmd,输入 :pip install DBUtils,即可进行自动安装。
说明:
DBUtils是一套Python数据库连接池包,并允许对非线程安全的数据库接口进行线程安全包装。DBUtils来自Webware for Python。DBUtils提供两种外部接口:
* PersistentDB :提供线程专用的数据库连接,并自动管理连接。
* PooledDB :提供线程间可共享的数据库连接,并自动管理连接。
实现
在实际数据库操作中,使用完毕后需要关闭游标(cursor)和连接(connection),为了简化代码,获取数据库连接采用 With open as …方式,执行完毕后自动关闭连接, 无需主动关闭。1、数据库参数配置
DB_config.py
#-*- coding: UTF-8 -*- ''' @描述:数据库配置信息 @作者:CYH @版本:V1.0 @创建时间:2016-11-24 上午9:23:06 ''' #TEST数据库信息 DB_TEST_HOST="127.0.0.1"; DB_TEST_PORT=3306; DB_TEST_DBNAME="sy"; DB_TEST_USER="root"; DB_TEST_PASSWORD="123456"; #数据库连接编码 DB_CHARSET="utf8"; #mincached : 启动时开启的闲置连接数量(缺省值 0 以为着开始时不创建连接) DB_MIN_CACHED=10; #maxcached : 连接池中允许的闲置的最多连接数量(缺省值 0 代表不闲置连接池大小) DB_MAX_CACHED=10; #maxshared : 共享连接数允许的最大数量(缺省值 0 代表所有连接都是专用的)如果达到了最大数量,被请求为共享的连接将会被共享使用 DB_MAX_SHARED=20; #maxconnecyions : 创建连接池的最大数量(缺省值 0 代表不限制) DB_MAX_CONNECYIONS=100; #blocking : 设置在连接池达到最大数量时的行为(缺省值 0 或 False 代表返回一个错误<toMany......>; 其他代表阻塞直到连接数减少,连接被分配) DB_BLOCKING=True; #maxusage : 单个连接的最大允许复用次数(缺省值 0 或 False 代表不限制的复用).当达到最大数时,连接会自动重新连接(关闭和重新打开) DB_MAX_USAGE=0; #setsession : 一个可选的SQL命令列表用于准备每个会话,如["set datestyle to german", ...] DB_SET_SESSION=None;
2、数据库连接创建、连接获取
# -*- coding: UTF-8 -*- """ @描述:数据库连接池管理模块 @作者:CYH @版本:V1.0 @创建时间:2016-11-24 上午8:43:14 """ import pymysql; from DBUtils.PooledDB import PooledDB; import DB_config as Config; ''' @功能:PT数据库连接池 ''' class PTConnectionPool(object): __pool = None; def __enter__(self): self.conn = self.__getConn(); self.cursor = self.conn.cursor(); print "PT数据库创建con和cursor"; return self; def getConn(self): if self.__pool is None: self.__pool = PooledDB(creator=pymysql, mincached=Config.DB_MIN_CACHED , maxcached=Config.DB_MAX_CACHED, maxshared=Config.DB_MAX_SHARED, maxconnections=Config.DB_MAX_CONNECYIONS, blocking=Config.DB_BLOCKING, maxusage=Config.DB_MAX_USAGE, setsession=Config.DB_SET_SESSION, host=Config.DB_TEST_HOST , port=Config.DB_TEST_PORT , user=Config.DB_TEST_USER , passwd=Config.DB_TEST_PASSWORD , db=Config.DB_TEST_DBNAME , use_unicode=False, charset=Config.DB_CHARSET); return self.__pool.connection() """ @summary: 释放连接池资源 """ def __exit__(self, type, value, trace): self.cursor.close() self.conn.close() print "PT连接池释放con和cursor"; ''' @功能:获取PT数据库连接 ''' def getPTConnection(): return PTConnectionPool();
3、获取连接操作数据库
#-*- coding: UTF-8 -*- ''' @描述: @作者:CYH @版本:V1.0 @创建时间:2016-11-24 上午9:34:54 ''' from DB_connetion_pool import getPTConnection, PTConnectionPool; def TestMySQL(): #申请资源 with getPTConnection() as db: # SQL 查询语句; sql = "SELECT * FROM sy_user"; try: # 获取所有记录列表 db.cursor.execute(sql) results = db.cursor.fetchall(); for row in results: userId = row[0] name= row[1] sex= row[2] createTime = row[3] # 打印结果 print ("userId=%d,name=%s,sex=%s,createTime=%s" %\ (userId, name, sex, createTime )) except: print ("Error: unable to fecth data") TestMySQL()
总结
采用DBUtils和pymyql实现数据库连接池操作,使用Python内置的With open as db 实现数据库连接使用完后自动关闭。说明:本文提供内容及代码仅作为学习、测试使用,未做详细性能测试和评估!
相关文章推荐
- Python学习笔记-pyMySQL连接MySQL数据库
- Windows与Linux系统如何基于Python安装连接MySQL数据库的工具包PyMySQL
- Python学习笔记-pyMySQL连接MySQL数据库
- Linux学习笔记--Python操作mysql数据库(封装基本的增删改查)
- Python的数据库连接池DBUtils
- swig的学习以及国密的python封装
- Linux学习之线程封装五:基于接口的封装
- Linux学习之线程封装六:基于模板的面向方面的封装(三个方面)
- python操作数据库学习,自封装一个类来处理
- python学习笔记 安装MySQLdb,连接mysql数据库
- MySQL数据库操作学习(Python)
- 我的python学习之路----发送带附件邮件(基于smtp)
- 基于python的正则表达式学习笔记
- python Django 学习笔记(四)—— 使用MySQL数据库
- mysql模块学习:python操作MySQL数据库
- swig的学习以及国密的python封装
- Linux学习之线程封装四:基于接口的封装
- 我的python学习之路----发送邮件(基于smtp)
- python学习---3(DBUtils.PooledDB)
- 基于MySQL数据库的C#与Python语言交互调用