python數據庫連接池


安裝DBUtils庫:

python3 -m pip install DBUtils去安裝DBUtils庫

 通過連接池的方式去創建數據庫對象:

這里參考我的上一篇博客:http://www.cnblogs.com/letmeiscool/p/8434381.html和DBUtils用戶指南:http://blog.csdn.net/gashero/article/details/1577187去寫。單獨寫了個創建連接池的方法,在創建數據庫對象的時候被執行。之后每次去執行sql的時候,不需要去創建連接池,只需要每次執行sql前去執行連接方法_Getconnect,sql執行完畢,去關閉連接,連接被數據庫連接池給回收。

 

 

#-*-coding:utf-8-*-s
#mysql和sqlserver的庫
import pymysql,pymssql
from DBUtils.PooledDB import PooledDB
class Database:
    def __init__(self,*db):
        if len(db)==5:
            #mysql數據庫
            self.host=db[0]
            self.port=db[1]
            self.user=db[2]
            self.pwd=db[3]
            self.db=db[4]
        else:
            #sqlserver數據庫
            self.host=db[0]
            self.port=None
            self.user=db[1]
            self.pwd=db[2]
            self.db=db[3]
        self._CreatePool()
    def _CreatePool(self):
        if not self.db:
            raise NameError+"沒有設置數據庫信息"
        if (self.port==None):
            self.Pool=PooledDB(creator=pymssql,mincached=2, maxcached=5,maxshared=3, maxconnections=6, blocking=True,host=self.host,user=self.user, \
                               password=self.pwd,database=self.db,charset="utf8")
        else:
            self.Pool=PooledDB(creator=pymysql,mincached=2, maxcached=5,maxshared=3, maxconnections=6, blocking=True,host=self.host,port=self.port, \
                               user=self.user,password=self.pwd,database =self.db,charset="utf8")
    def _Getconnect(self):
        self.conn=self.Pool.connection()
        cur=self.conn.cursor()
        if not cur:
            raise "數據庫連接不上"
        else:
            return cur
    #查詢sql
    def ExecQuery(self,sql):
        cur=self._Getconnect()
        cur.execute(sql)
        relist=cur.fetchall()
        cur.close()
        self.conn.close()
        return relist
    #非查詢的sql
    def ExecNoQuery(self,sql):
        cur=self._Getconnect()
        cur.execute(sql)
        self.conn.commit()
        cur.close()
        self.conn.close()

 

  

PooledDB的參數:

 

  • dbapi: 需要使用的DB-API 2模塊
  • mincached : 啟動時開啟的空連接數量(缺省值 0 意味着開始時不創建連接)
  • maxcached: 連接池使用的最多連接數量(缺省值 0 代表不限制連接池大小)
  • maxshared: 最大允許的共享連接數量(缺省值 0 代表所有連接都是專用的)如果達到了最大數量,被請求為共享的連接將會被共享使用。
  • maxconnections: 最大允許連接數量(缺省值 0 代表不限制)
  • blocking: 設置在達到最大數量時的行為(缺省值 0 或 False 代表返回一個錯誤;其他代表阻塞直到連接數減少)
  • maxusage: 單個連接的最大允許復用次數(缺省值 0 或 False 代表不限制的復用)。當達到最大數值時,連接會自動重新連接(關閉和重新打開)
  • setsession: 一個可選的SQL命令列表用於准備每個會話,如 ["set datestyle to german", ...]
  • 其他,你可以設置用於傳遞到真正的DB-API 2的參數,例如主機名、數據庫、用戶名、密碼等。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM