自己封装的python——DBUtilS,大家多多指教

这个Utils用了第三方库DBUtils,我经过又一层了简单封装,自认为还是挺简洁的,只实现了增删改查

import MySQLdb,functools

from DBUtils.PooledDB import PooledDB
import sys
reload(sys)
sys.setdefaultencoding('utf-8')
sys.path.append('../')
import readConfig 

__author__='xiezhaodong at 2014-8-14'

class Mysql(object):
	'''
	This method can get the connection pool and a connection object
	'''
	conn=None
	__pool=None
	def __init__(self):

		self.__pool=self.__initPool()
		self.conn=self.getConn()
	@staticmethod
	def __initPool():
		'''
		A static method cannot access the instance variables
		'''
		if Mysql.__pool is None:

			try:
				print 'install pool'
				__pool=PooledDB(creator=MySQLdb,maxusage=readConfig.maxusage,mincached=readConfig.mincached,maxcached=readConfig.maxcached, db=readConfig.db, host=readConfig.host, user=readConfig.user, passwd=readConfig.passwd, charset=readConfig.charset,port=readConfig.port)
				return __pool
			except Exception,e :
				print 'create pool default',e
				return None
	def getConn(self):
		'''
		Get a link from the connection pool
		'''
		#print 'get connection from pool'
		if self.__pool is None:
			return None
		return self.__pool.connection()
init=Mysql()
class _ConnetionCtx(object):
	'''
	Ctx get connection and  exit close connection
	can user with _ConnetionCtx():

	'''

	def __enter__(self):
		global init
		self.mysql=init#Load the MySQL object get links
		self.conn=None
		self.clean=False
		if self.conn is None:
			#print 'connect'
			self.conn=self.mysql.getConn()
			self.clean=True
			#print self.conn,'---------connection'

		return self
	def __exit__(self,exc_type,exc_value,traceback):

		if self.conn is not None and self.clean is True:
			'''
			Release the connection object
			'''
			#print 'close conn'
			self.conn.close()
			self.conn=None

def ConnectionCtxController(func):
	'''
	decorator to get connection and release connection
	The CTX parameter passed to the function

	'''

	@functools.wraps(func)
	def _wrapper(**args):
		with _ConnetionCtx() as Ctx:
			return func(Ctx=Ctx,**args)
	return _wrapper

@ConnectionCtxController
def select(Ctx,sql,kw):
	'''	get select rows
		Returns None if the said no database links, return () said there is no corresponding data
	'''
	sql=sql.replace('?','%s')
	conn=Ctx.conn
	result=None
	if conn is None:
		'''
		no conn
		'''

		return None
	else:
		'''have conn'''
		try:
			cur=conn.cursor()
			cur.execute(sql,kw)
			result=cur.fetchall()
		except Exception ,e:
			print 'select default',e
			return None
		finally:
			cur.close()
		return result
@ConnectionCtxController
def CRUDExceptSelect(Ctx,sql,kw,batch=False):
	'''
	This method can add, delete, modify, the default batch is False if True will use batch SQL statements,
	the return value is None for no connection or the SQL is abnormal,
	the other back value represents the number of successful execution

	'''
	sql=sql.replace('?','%s')
	conn=Ctx.conn
	row_succcess=None
	if conn is None:
		return None
	else:
		cur=None
		try:
			cur=conn.cursor()
			if batch:
				row_succcess=cur.executemany(sql,kw)
			else:
				row_succcess=cur.execute(sql,kw)
		except Exception, e:
			conn.rollback()
			print 'insetr default',e
		finally:
			if cur is not None:
				print 'close cur'
				cur.close()
			conn.commit()
		#
	return row_succcess

github地址:https://github.com/xiexiaodong/blog/blob/master/python-db.py

config

[db]
db_host=sqld.duapp.com
db_port=4050
db_user=youruser
db_pass=yourpassword
maxusage=10
mincached=10
maxcached=100
db=uWKDOxUdHCujVdsrCjjY
charset=utf8
[concurrent]
thread=10
processor=20 

readconfig

import ConfigParser,string,os,sys
'''
reload config
'''
class config(object):
	def __init__(self,path='./config.ini'):
		self.path=path
		self.cf=ConfigParser.ConfigParser()
		#print self.cf,'cf'
		try:
			self.cf.read(self.path)
			self.section=self.cf.sections()
		except Exception,e:
			print e,'exception read'
		#print 'start',self.section
	def get(self,field,key):
		result=''
		try:
			result=self.cf.get(field,key)

		except Exception,e:
			print e,'2'
			result=''
		return result
	def getint(self,field,key):
		result=''
		try:
			result=self.cf.getint(field,key)

		except Exception,e:
			print e,'2'
			result=''
		return result

config=config()
host=config.get('db','db_host')
port=config.getint('db','db_port')
user=config.get('db','db_user')
passwd=config.get('db','db_pass')
maxusage=config.getint('db','maxusage')
mincached=config.getint('db','mincached')
maxcached=config.getint('db','maxcached')
db=config.get('db','db')
charset=config.get('db','charset')
时间: 2024-10-05 09:10:01

自己封装的python——DBUtilS,大家多多指教的相关文章

利用SIP将C++封装为Python

SIP 是为Python生成C++接口代码的工具,它与 SWIG 类似,但使用不同的接口格式.其思想起源于SWIG,主要是为将QT封装为Python创造,它用作创建 PyQt和 PyKDE ,并支持 Qt signal/slot 系统. 本文主要介绍在Window平台下,SIP的编译.安装,以及将C++代码生成为Python.本文是在安装了Python的前提下介绍,Python的安装包,可以上其官网下载,这里不再累赘! 1.SIP编译及安装 在SIP官网http://www.riverbankc

自己写的一个帧处理代码,请多多指教

这段时间在一个项目中负责程序与下位机USB设备的通讯.将接收到的USB数据做帧处理之后做成一个完整的帧送入队列中等待上层应用对帧数据进行解析. 相信很多人在做与下位机通讯的项目的时候,都会为帧处理烦恼.因为上位机在接收数据的时候,由于收到操作系统调度的影响,有时候收到的是半帧,有时候收到的是一帧半数据.如果不做帧处理的话,就会严重丢包. 在项目中我写了一个帧处理代码,经过测试验证很稳定.拿出来分享一下,也请大家多多指教. 我们项目中的协议是<<.................>>

今天来电脑知名网站开博了欢迎大家多多指教

今天来电脑知名网站开博了欢迎大家多多指教.由于时间关系我有空会为大家更新一些网络前沿的信息技术知识和网络营销经验,请大家多多指教.

自己写的jQuery 左右选择框,大家多多指教!

Html代码   <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> <HTML> <HEAD> <TITLE> New Document </TITLE> <META NAME="Generator" CONTENT="EditPlus"> <META NAME="Author&quo

java,请多多指教

记得当初学C语言的时候,第一个程序是"Hello World",而我java的第一个程序也是"Hello World".我想从事游戏开发设计方面的工作,我知道那会很难,而且会很久,但什么职业又不是这样来的呢?一本上千页的书,最初还不是从一张张白纸走过来的,谁知道它花了几年,十几年,甚至几十年才完成的.所以,学路漫漫,java,请多多指教! public class Hello { public static void main(String[] args) { Sy

LightMysql:为方便操作MySQL而封装的Python类

原文链接:http://www.danfengcao.info/python/2015/12/26/lightweight-python-mysql-class.html mysqldb是Python操作MySQL数据库的一个常用包.但在使用过程中,我认为用起来还不够简便.为此,我在mysqldb的基础上封装了一个Python类LightMysql. 先来看如何使用 example.py #!/usr/bin/env python # -*- coding: utf-8 -*- from Lig

学生新人开通blog,多多指教

这里是苦逼计算机系大一新生CheeseBurger一枚,在奇怪的高考制度下,身为一本学渣,稀里糊涂地就从高大的985的树上掉了下来.其实计算机也并不是我特别喜欢的.尽管从小就接受者计算机的熏陶,用logo海龟画出各式各样的图形,试过FrontPage搭建的网站,也flash过小学操场上篮球弹跳的激情,也PS过各种美图,但随着时间的侵蚀,我基本已经一窍不通.高中都有VB课,计算机系也有C++,Java,SQL之类的课程.现在,我和那些从来没摸过电脑,连循环结构都弄不清楚的同学们,一起“学习”.哈哈

python DBUtils.PooledDB 中 maxcached 和 maxconnections

PooledDB 有这么几个参数 mincached : the initial number of idle connections in the pool (the default of 0 means no connections are made at startup) maxcached: the maximum number of idle connections in the pool (the default value of 0 or None means unlimited

python:拼多多订单接口api

最近工作需要用到pdd的一些接口,官方竟然没有提供,python的sdk,于是就自己简单的写了一个订单接口的api.希望能帮助到使用python的小伙伴: #!/usr/bin/python3 # -*- coding: utf-8 -*- # @Time : 2020/3/29 0021 下午 19:40 # @Author : xiaozhi! # @FileName: pdd_api # @Software: PyCharm import time import hashlib impor