python DbUtils 封装
来源:互联网 发布:手机淘宝代理怎么发货 编辑:程序博客网 时间:2024/05/16 23:36
python DbUtils 封装
1.python dbutils 说明:
DBUtils是一套Python数据库连接池包,并允许对非线程安全的数据库接口进行线程安全包装。DBUtils来自Webware for Python。
DBUtils提供两种外部接口:
* PersistentDB :提供线程专用的数据库连接,并自动管理连接。
* PooledDB :提供线程间可共享的数据库连接,并自动管理连接。
需要库
1、DBUtils pip install DBUtils
2、pymysql pip install pymysql/MySQLdb
MyDbUtils:
#-*- coding: UTF-8 -*-import pymysqlfrom DBUtils.PooledDB import PooledDBimport DB_config as Configimport MySQLdb'''@功能:PT数据库连接池'''class PTConnectionPool(object): __pool = None; # def __init__(self): # self.conn = self.__getConn(); # self.cursor = self.conn.cursor(); def __enter__(self): self.conn = self.__getConn(); self.cursor = self.conn.cursor(); print u"PT数据库创建con和cursor"; return self; def __getConn(self): if self.__pool is None: self.__pool = PooledDB(creator=MySQLdb, 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 u"PT连接池释放con和cursor";#重连接池中取出一个连接def getconn(self): conn = self.__getConn(); cursor = conn.cursor(); return cursor,conn#关闭连接归还给连接池# def close(self):# self.cursor.close()# self.conn.close()# print u"PT连接池释放con和cursor";def getPTConnection(): return PTConnectionPool()
配置文件:DB_config.py
#-*- coding: UTF-8 -*-#TEST数据库信息DB_TEST_HOST="192.168.88.6";DB_TEST_PORT=3306;DB_TEST_DBNAME="asterisk";DB_TEST_USER="root";DB_TEST_PASSWORD="kalamodo";#数据库连接编码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;
封装的mysqlhelp.py
coding=utf-8
import MySQLdbfrom MyDbUtils import getPTConnectionclass MysqlHelp(object):mysql=Nonedef __init__(self): # self.connect() self.db=getPTConnection()def __new__(cls, *args, **kwargs): if not hasattr(cls, 'inst'): cls.inst = super(MysqlHelp, cls).__new__(cls, *args, **kwargs) return cls.inst#查询所有def selectall(self,sql='',param=()): #判断是否连接,并设置重连机制 # self.connected() try: cursor,conn=self.execute(sql,param) res=cursor.fetchall() self.close(cursor, conn) return res except Exception,e: print 'selectall except ', e.args self.close(cursor, conn) return None#查询一条def selectone(self,sql='',param=()): # self.connected() try: # cur = self.db.cursor() cursor, conn=self.execute(sql,param) res = cursor.fetchone() self.close(cursor, conn) return res except Exception, e: print 'selectone except ', e.args self.close(cursor, conn) return None#增加def insert(self,sql='',param=()): # self.connected() try: # self.db.getconn().execute(sql, param) cursor, conn=self.execute(sql,param) print '============' # _id=self.db.conn.insert_id() _id=cursor.lastrowid print '_id ',_id conn.commit() self.close(cursor, conn) #防止表中没有id返回0 if _id==0: return True return _id except Exception, e: print 'insert except ', e.args conn.rollback() self.close(cursor, conn) # self.conn.rollback() return 0#增加多行def insertmany(self,sql='',param=()): # self.connected() cursor,conn=self.db.getconn() try: cursor.executemany(sql, param) # self.execute(sql,param) conn.commit() self.close(cursor, conn) return True except Exception, e: print 'insert many except ', e.args conn.rollback() self.close(cursor, conn) # self.conn.rollback() return False#删除def delete(self,sql='',param=()): # self.connected() try: # cur = self.conn.cursor() # self.db.getconn().execute(sql, param) cursor,conn=self.execute(sql,param) # self.db.conn.commit() self.close(cursor, conn) return True except Exception, e: print 'delete except ', e.args conn.rollback() self.close(cursor, conn) # self.conn.rollback() return False#更新def update(self,sql='',param=()): # self.connected() try: #cur = self.conn.cursor() # self.db.getconn().execute(sql, param) cursor,conn=self.execute(sql,param) # self.db.conn.commit() self.close(cursor, conn) return True except Exception, e: print 'update except ',e.args conn.rollback() self.close(cursor, conn) # self.conn.rollback() return False@classmethoddef getInstance(self): if MysqlHelp.mysql==None: MysqlHelp.mysql=MysqlHelp() return MysqlHelp.mysql#执行命令def execute(self,sql='',param=(),autoclose=False): cursor, conn = self.db.getconn() try: if param: cursor.execute(sql, param) else: cursor.execute(sql) conn.commit() if autoclose: self.close(cursor, conn) except Exception as e: pass return cursor, conn#执行多条命令'[{"sql":"xxx","param":"xx"}....]'def executemany(self,list=[]): cursor,conn=self.db.getconn() try: for order in list: sql=order['sql'] param=order['param'] if param: cursor.execute(sql,param) else: cursor.execute(sql) conn.commit() self.close(cursor, conn) return True except Exception as e: print 'execute failed========',e.args conn.rollback() self.close(cursor, conn) return Falsedef connect(self): self.conn = MySQLdb.connect(user='root', db='asterisk', passwd='kalamodo', host='192.168.88.6')def close(self,cursor,conn): cursor.close() conn.close() print u"PT连接池释放con和cursor";
传送门 http://download.csdn.net/download/u010939285/9831459
0 0
- python DbUtils 封装
- DBUtils 封装
- 封装DBUtils
- DbUtils简单封装JDBC
- DBUtils+C3P0封装
- dbutils简单封装
- Python学习一:基于DBUtils和pymysql的MySQL数据库连接池封装
- ORM底层封装( JDBC \ DBUtils)
- Python数据库连接池DBUtils
- Python数据库连接池DBUtils
- 轻量级JDBC封装DBUtils简单教程
- Apache DbUtils - JDBC轻量级封装的工具包
- DbUtils component学习使用(jdbc封装工具)
- 理解dbutils对jdbc的封装
- Python数据库连接池 《DBUtils用户指南》
- Python的数据库连接池DBUtils
- Python数据库连接池DBUtils.PooledDB
- Python数据库连接池DBUtils.PooledDB
- ionic实现App动态更新,热更新
- android6/7 system打包脚本
- 导数
- 【C语言训练】自由落体问题
- 使用live555 在linux下搭建 rtsp server
- python DbUtils 封装
- 网络编程--Socket--UDP广播
- Linux环境下安装Node.js
- SecureCRT&SecureFX(一):SecureCRT的介绍与下载安装
- CentOS 6.8 安装MySql 5.6
- iOS企业应用的分发
- esp8266使用函数espconn_gethostbyname()解析失败的问题
- idea15自动编译配置
- 半闲居士视觉SLAM十四讲笔记(5)相机与图像