python之資料庫連線池.md
阿新 • • 發佈:2018-12-12
帶著問題做學問
之前只是聽說過資料庫連線池,但是還沒有真正的使用過。專案之初,只是簡單的利用pymysql做資料庫的一些操作,隨著專案的進行發現程式程序還在,但資料庫的連線已被關閉(超過一定時間後,資料庫連線會自動關閉),帶著這個問題,通過諮詢和查詢資料,於是有了本篇。
資料庫連線池的作用
資料庫連線池能在系統初始化的時候建立一定數量(具體數量由配置檔案決定)的資料庫連線,並維護這些連線在記憶體中,當用戶訪問時,可以快速的提供一個空閒連線(連線在初始化時已建好,省時)使用者使用完畢,連線重新迴歸連線池。可通過配置檔案修改連線池的初始連線數、最大空閒時間、使用次數等。
DBUtils
DBUtils是一套Python資料庫連線池包,可以使你很方便的使用資料庫連線池而不必自己搭建。
下載地址: DBUtils,
也可以使用pip方法安裝。
pip install DBUtils
建立一個數據庫連線池
具體程式碼如下:
import pymysql from DBUtils.PooledDB import PooledDB import json import os class DBPool(object): __pool = None def __init__(self): # 建構函式,建立資料庫連線 self.conn = DBPool.getmysqlconn(self) self.cur = self.conn.cursor(cursor=pymysql.cursors.DictCursor) def get_config(self, file_name="db_config"): path = os.getcwd() # 獲取當前工作目錄 with open(path +'\DB_pool\\' + file_name, "r", encoding='utf8') as f: config = json.load(f) return config @staticmethod def getmysqlconn(self): conf = self.get_config() if DBPool.__pool is None: __pool = PooledDB(creator=pymysql, mincached=conf['db_pool']['mincached'], maxcached=conf['db_pool']['maxcached'], maxshared=conf['db_pool']['maxshared'], maxconnections=conf['db_pool']['maxconnections'], blocking=conf['db_pool']['blocking'], maxusage=conf['db_pool']['maxusage'], setsession=None, host=conf['db']['host'], port=conf['db']['port'], user=conf['db']['user'], passwd=conf['db']['password'], db = conf['db']['database'], charset=conf['db']['charset'] ) return __pool.connection() def get_data(self, sql): """ 查詢 :param sql: :return: """ self.cur.execute(sql) result = self.cur.fetchall() return result def modify(self, sql, args): try: num = self.cur.executemany(sql, args) self.conn.commit() return num except Exception as e: self.conn.rollback() def dispose(self): # 關閉連線 self.cur.close() self.conn.close() if __name__=='__main__': ad = DBPool() sql = '' # sql_ = "" sql_args = [] result = ad.get_data(sql) # num = ad.modify(sql_, [sql_args]) print(result)
配置檔案如下:
{
"db":{
"host":"localhost",
"port":3306,
"user":"root",
"password":"root",
"database":"test",
"charset":"utf8"
},
"db_pool":{
"mincached":2,
"maxcached":10,
"maxshared":10,
"maxconnections":10,
"blocking":1,
"maxusage":0
}
}
具體引數的含義:
mincached :啟動時開啟的空連線數量 maxcached :連線池最大可用連線數量 maxshared :連線池最大可共享連線數量 maxconnections :最大允許連線數量 blocking :達到最大數量時是否阻塞 maxusage :單個連線最大複用次數 setsession :用於傳遞到資料庫的準備會話