Python安装及配置略,本文前默认已经配置好Python环境。
打开cmd,输入python,出现以下画面表示Python安装成功。
1、DBUtils 下载地址:DBUtils
2、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 代表返回一个错误; 其他代表阻塞直到连接数减少,连接被分配)
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 实现数据库连接使用完后自动关闭。
说明:本文提供内容及代码仅作为学习、测试使用,未做详细性能测试和评估!