亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > Python > 正文

Python實現Mysql數據庫連接池實例詳解

2020-02-23 04:34:06
字體:
來源:轉載
供稿:網友

python連接Mysql數據庫:

Python編程中可以使用MySQLdb進行數據庫的連接及諸如查詢/插入/更新等操作,但是每次連接MySQL數據庫請求時,都是獨立的去請求訪問,相當浪費資源,而且訪問數量達到一定數量時,對mysql的性能會產生較大的影響。因此,實際使用中,通常會使用數據庫的連接池技術,來訪問數據庫達到資源復用的目的。
數據庫連接池

python的數據庫連接池包 DBUtils:

DBUtils是一套Python數據庫連接池包,并允許對非線程安全的數據庫接口進行線程安全包裝。DBUtils來自Webware for Python。

DBUtils提供兩種外部接口:

* PersistentDB :提供線程專用的數據庫連接,并自動管理連接。
* PooledDB :提供線程間可共享的數據庫連接,并自動管理連接。

下載地址:DBUtils   下載解壓后,使用python setup.py install 命令進行安裝

下面利用MySQLdb和DBUtils建立自己的mysql數據庫連接池工具包

在工程目錄下新建package命名為:dbConnecttion,并新建module命名為MySqlConn,下面是MySqlConn.py,該模塊創建Mysql的連接池對象,并創建了如查詢/插入等通用的操作方法。該部分代碼實現如下:

# -*- coding: UTF-8 -*- """ Created on 2016年5月7日  @author: baocheng 1、執行帶參數的SQL時,請先用sql語句指定需要輸入的條件列表,然后再用tuple/list進行條件批配 2、在格式SQL中不需要使用引號指定數據類型,系統會根據輸入參數自動識別 3、在輸入的值中不需要使用轉意函數,系統會自動處理 """  import MySQLdb from MySQLdb.cursors import DictCursor from DBUtils.PooledDB import PooledDB #from PooledDB import PooledDB import Config  """ Config是一些數據庫的配置文件 """  class Mysql(object):  """  MYSQL數據庫對象,負責產生數據庫連接 , 此類中的連接采用連接池實現獲取連接對象:conn = Mysql.getConn()    釋放連接對象;conn.close()或del conn  """  #連接池對象  __pool = None  def __init__(self):   #數據庫構造函數,從連接池中取出連接,并生成操作游標   self._conn = Mysql.__getConn()   self._cursor = self._conn.cursor()   @staticmethod  def __getConn():   """   @summary: 靜態方法,從連接池中取出連接   @return MySQLdb.connection   """   if Mysql.__pool is None:    __pool = PooledDB(creator=MySQLdb, mincached=1 , maxcached=20 ,         host=Config.DBHOST , port=Config.DBPORT , user=Config.DBUSER , passwd=Config.DBPWD ,         db=Config.DBNAME,use_unicode=False,charset=Config.DBCHAR,cursorclass=DictCursor)   return __pool.connection()   def getAll(self,sql,param=None):   """   @summary: 執行查詢,并取出所有結果集   @param sql:查詢SQL,如果有查詢條件,請只指定條件列表,并將條件值使用參數[param]傳遞進來   @param param: 可選參數,條件列表值(元組/列表)   @return: result list(字典對象)/boolean 查詢到的結果集   """   if param is None:    count = self._cursor.execute(sql)   else:    count = self._cursor.execute(sql,param)   if count>0:    result = self._cursor.fetchall()   else:    result = False   return result   def getOne(self,sql,param=None):   """   @summary: 執行查詢,并取出第一條   @param sql:查詢SQL,如果有查詢條件,請只指定條件列表,并將條件值使用參數[param]傳遞進來   @param param: 可選參數,條件列表值(元組/列表)   @return: result list/boolean 查詢到的結果集   """   if param is None:    count = self._cursor.execute(sql)   else:    count = self._cursor.execute(sql,param)   if count>0:    result = self._cursor.fetchone()   else:    result = False   return result   def getMany(self,sql,num,param=None):   """   @summary: 執行查詢,并取出num條結果   @param sql:查詢SQL,如果有查詢條件,請只指定條件列表,并將條件值使用參數[param]傳遞進來   @param num:取得的結果條數   @param param: 可選參數,條件列表值(元組/列表)   @return: result list/boolean 查詢到的結果集   """   if param is None:    count = self._cursor.execute(sql)   else:    count = self._cursor.execute(sql,param)   if count>0:    result = self._cursor.fetchmany(num)   else:    result = False   return result   def insertOne(self,sql,value):   """   @summary: 向數據表插入一條記錄   @param sql:要插入的SQL格式   @param value:要插入的記錄數據tuple/list   @return: insertId 受影響的行數   """   self._cursor.execute(sql,value)   return self.__getInsertId()   def insertMany(self,sql,values):   """   @summary: 向數據表插入多條記錄   @param sql:要插入的SQL格式   @param values:要插入的記錄數據tuple(tuple)/list[list]   @return: count 受影響的行數   """   count = self._cursor.executemany(sql,values)   return count   def __getInsertId(self):   """   獲取當前連接最后一次插入操作生成的id,如果沒有則為0   """   self._cursor.execute("SELECT @@IDENTITY AS id")   result = self._cursor.fetchall()   return result[0]['id']   def __query(self,sql,param=None):   if param is None:    count = self._cursor.execute(sql)   else:    count = self._cursor.execute(sql,param)   return count   def update(self,sql,param=None):   """   @summary: 更新數據表記錄   @param sql: SQL格式及條件,使用(%s,%s)   @param param: 要更新的 值 tuple/list   @return: count 受影響的行數   """   return self.__query(sql,param)   def delete(self,sql,param=None):   """   @summary: 刪除數據表記錄   @param sql: SQL格式及條件,使用(%s,%s)   @param param: 要刪除的條件 值 tuple/list   @return: count 受影響的行數   """   return self.__query(sql,param)   def begin(self):   """   @summary: 開啟事務   """   self._conn.autocommit(0)   def end(self,option='commit'):   """   @summary: 結束事務   """   if option=='commit':    self._conn.commit()   else:    self._conn.rollback()   def dispose(self,isEnd=1):   """   @summary: 釋放連接池資源   """   if isEnd==1:    self.end('commit')   else:    self.end('rollback');   self._cursor.close()   self._conn.close()             
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
日本精品视频网站| 久久亚洲精品一区二区| 亚洲www永久成人夜色| 久久全球大尺度高清视频| 久久精品国产久精国产思思| 久久999免费视频| 91精品久久久久久久久久另类| 伦伦影院午夜日韩欧美限制| 亚洲欧美另类在线观看| 亚洲免费电影在线观看| 久久久国产视频91| 国产亚洲欧美一区| 亚洲国产天堂久久综合网| 欧美精品手机在线| 日韩欧美国产一区二区| 亚洲肉体裸体xxxx137| 亚洲欧洲日韩国产| 亚洲精品久久久久久久久久久久久| 亚洲精品国精品久久99热| 一区二区三区在线播放欧美| 亚洲风情亚aⅴ在线发布| 欧美疯狂xxxx大交乱88av| 亚洲国产99精品国自产| 亚洲午夜av久久乱码| 国产精品女人久久久久久| 国产精品一区二区三区久久久| 国产91免费看片| 久久精品国产一区二区电影| 久热精品视频在线免费观看| 久久频这里精品99香蕉| 中文字幕免费精品一区| 日韩免费黄色av| 91在线观看免费网站| 精品久久久久久久久久ntr影视| 久久久久久国产精品美女| 欧美亚洲国产视频小说| 国产精品视频一| 日韩精品免费在线视频| 成人免费视频a| 欧美丝袜一区二区| 日韩资源在线观看| 日韩中文字幕国产精品| 色噜噜亚洲精品中文字幕| 国产一区二区三区精品久久久| 国内精品久久久久久久久| 欧美激情亚洲激情| 91wwwcom在线观看| 精品国内亚洲在观看18黄| 精品视频在线播放色网色视频| 亚洲精品视频在线观看视频| 欧美日韩中文字幕在线| 乱亲女秽乱长久久久| 亚洲图片欧美日产| 欧美诱惑福利视频| 亚洲美女喷白浆| 97av在线视频免费播放| 久久av红桃一区二区小说| 欧美俄罗斯乱妇| 国产精品爽爽ⅴa在线观看| 亚洲精品福利资源站| 色综合天天综合网国产成人网| 精品福利一区二区| 欧美日韩国产va另类| www国产精品视频| 欧美日韩精品中文字幕| 国产精品欧美日韩久久| 亚洲色图17p| 欧美与欧洲交xxxx免费观看| 国产一区欧美二区三区| 国产日韩精品入口| 国产精品日本精品| 亚洲国产天堂久久综合| 亚洲va久久久噜噜噜久久天堂| 成人在线精品视频| 中文字幕不卡在线视频极品| 国内外成人免费激情在线视频| 992tv在线成人免费观看| 久久久久久久久久久亚洲| 国产精品久久一| 一区二区成人精品| 精品成人乱色一区二区| 日韩精品免费观看| 这里只有精品在线观看| 亚洲精品一区av在线播放| 国产精品久久二区| 亚洲欧美日韩中文在线制服| 欧美黑人性生活视频| 成人免费高清完整版在线观看| 亚洲男人天堂手机在线| 97高清免费视频| 久热精品视频在线观看| 在线免费看av不卡| 日韩中文av在线| 久久精品国产免费观看| 69av视频在线播放| 狠狠综合久久av一区二区小说| 欧美一级高清免费播放| 美女少妇精品视频| 成人信息集中地欧美| 亚洲激情成人网| 亚洲一区二区三区777| 成人中文字幕+乱码+中文字幕| 亚洲精品小视频| 在线不卡国产精品| 国产精品免费福利| 欧美重口另类videos人妖| 2021久久精品国产99国产精品| 国产精品99久久久久久久久久久久| 日韩欧美一区二区在线| 精品福利一区二区| 国产综合香蕉五月婷在线| 国产一区二区三区丝袜| 亚洲黄在线观看| 日韩精品在线私人| 精品久久久久人成| 91在线观看免费高清| 国产精品福利在线观看| 亚洲精品自在久久| 欧美日韩999| 国产亚洲视频中文字幕视频| 国产在线精品一区免费香蕉| 亚洲裸体xxxx| 国产偷国产偷亚洲清高网站| 亚洲欧美日韩爽爽影院| 亚洲成年人在线播放| 97在线免费视频| 一区二区在线视频播放| 成人动漫网站在线观看| 国产精品色午夜在线观看| 一夜七次郎国产精品亚洲| 韩国日本不卡在线| 欧美一级片久久久久久久| 日韩中文视频免费在线观看| 日韩中文字幕国产精品| 亚洲男女自偷自拍图片另类| 91欧美精品午夜性色福利在线| www国产91| 久久久久久久久久国产| 国产91精品高潮白浆喷水| 欧美一区二区三区图| 日韩有码视频在线| 国产精品白丝av嫩草影院| 久久99精品久久久久久琪琪| 亚洲国语精品自产拍在线观看| 亚洲新声在线观看| 国产精品视频地址| 精品久久久久久中文字幕一区奶水| 一区二区三区回区在观看免费视频| 国产+成+人+亚洲欧洲| 欧美在线性视频| 欧美激情在线观看| 欧美一区视频在线| 国产亚洲a∨片在线观看| 91av在线播放视频| 精品久久久久久久久久ntr影视| 国产一区二区黄| 国产精品69av| 国产精品亚洲视频在线观看| 精品国产31久久久久久| 国产日韩欧美在线| 欧美日韩国产成人在线| 欧美一级淫片丝袜脚交| 国产精品视频99| 日韩av电影在线免费播放|