1.創建數據庫連接池
# 使用前先安裝dbutils,如下: # pip install --default-timeout=100 dbutils
import time import threading import pymysql from DBUtils.PooledDB import PooledDB, SharedDBConnection POOL = PooledDB( # 使用鏈接數據庫的模塊 creator=pymysql, # 連接池允許的最大連接數,0和None表示不限制連接數 maxconnections=6, # 初始化時,鏈接池中至少創建的空閑的鏈接,0表示不創建 mincached=2, # 鏈接池中最多閑置的鏈接,0和None不限制 maxcached=5, # 鏈接池中最多共享的鏈接數量,0和None表示全部共享。 # 因為pymysql和MySQLdb等模塊的 threadsafety都為1, # 所有值無論設置為多少,maxcached永遠為0,所以永遠是所有鏈接都共享。 maxshared=3, # 連接池中如果沒有可用連接后,是否阻塞等待。True,等待;False,不等待然后報錯 blocking=True, # 一個鏈接最多被重復使用的次數,None表示無限制 maxusage=None, # 開始會話前執行的命令列表。如:["set datestyle to ...", "set time zone ..."] setsession=[], # ping MySQL服務端,檢查是否服務可用。 # 如:0 = None = never, 1 = default = whenever it is requested, # 2 = when a cursor is created, 4 = when a query is executed, 7 = always ping=0, # 主機地址 host='127.0.0.1', # 端口 port=3306, # 數據庫用戶名 user='root', # 數據庫密碼 password='root', # 數據庫名 database='database_name', # 字符編碼 charset='utf8' )
2.使用數據庫連接池
def func(): # 檢測當前正在運行連接數的是否小於最大鏈接數,如果不小於則:等待或報raise TooManyConnections異常 # 否則則優先去初始化時創建的鏈接中獲取鏈接 SteadyDBConnection。 # 然后將SteadyDBConnection對象封裝到PooledDedicatedDBConnection中並返回。 # 如果最開始創建的鏈接沒有鏈接,則去創建一個SteadyDBConnection對象,再封裝到PooledDedicatedDBConnection中並返回。 # 一旦關閉鏈接后,連接就返回到連接池讓后續線程繼續使用。 # 創建連接,POOL數據庫連接池中 conn = POOL.connection() # 創建游標 cursor = conn.cursor() # SQL語句 cursor.execute('select * from tb1') # 執行結果 result = cursor.fetchall() # 將conn釋放,放回連接池 conn.close()