python資料庫連線池基於DBUtils

2022-03-14 05:07:36 字數 2690 閱讀 9426

dbutils模組的使用的兩種方式

dbutils是python的乙個用於實現資料庫連線池的模組

安裝

pip install dbutils
1.使用姿勢一(不建議此方法)
為每個執行緒(資源占用過多)建立乙個連線,執行緒即使呼叫了close方法,也不會關閉,只是把連線重新放到連線池,供自己執行緒再次使用。當執行緒終止時,連線自動關閉。

pool = persistentdb(

creator=pymysql, # 使用鏈結資料庫的模組

maxusage=none, # 乙個鏈結最多被重複使用的次數,none表示無限制

setsession=, # 開始會話前執行的命令列表。如:["set datestyle to ...", "set time zone ..."]

ping=0,

# 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

closeable=false,

# 如果為false時, conn.close() 實際上被忽略,供下次使用,再執行緒關閉時,才會自動關閉鏈結。如果為true時, conn.close()則關閉鏈結,那麼再次呼叫pool.connection時就會報錯,因為已經真的關閉了連線(pool.steady_connection()可以獲取乙個新的鏈結)

threadlocal=none, # 本執行緒獨享值得物件,用於儲存鏈結物件,如果鏈結物件被重置

host='127.0.0.1',

port=3306,

user='root',

password='123',

database='pooldb',

charset='utf8'

)def func():

conn = pool.connection(shareable=false)

cursor = conn.cursor()

cursor.execute('select * from tb1')

result = cursor.fetchall()

cursor.close()

conn.close()

func()

2.使用姿勢二(好姿勢)
建立一批連線到連線池,供所有執行緒共享使用。(資源重複利用節約資源)

ps:由於pymysql、mysqldb等threadsafety值為1,所以該模式連線池中的執行緒會被所有執行緒共享。

import time

import pymysql

import threading

from dbutils.pooleddb import pooleddb, shareddbconnection

pool = pooleddb(

creator=pymysql, # 使用鏈結資料庫的模組

maxconnections=6, # 連線池允許的最大連線數,0和none表示不限制連線數

mincached=2, # 初始化時,鏈結池中至少建立的空閒的鏈結,0表示不建立

maxcached=5, # 鏈結池中最多閒置的鏈結,0和none不限制

maxshared=3, # 鏈結池中最多共享的鏈結數量,0和none表示全部共享。ps: 無用,因為pymysql和mysqldb等模組的 threadsafety都為1,所有值無論設定為多少,_maxcached永遠為0,所以永遠是所有鏈結都共享。

blocking=true, # 連線池中如果沒有可用連線後,是否阻塞等待。true,等待;false,不等待然後報錯

maxusage=none, # 乙個鏈結最多被重複使用的次數,none表示無限制

setsession=, # 開始會話前執行的命令列表。如:["set datestyle to ...", "set time zone ..."]

ping=0,

# 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

host='127.0.0.1',

port=3306,

user='root',

password='123',

database='pooldb',

charset='utf8'

)def func():

# 一旦關閉鏈結後,連線就返回到連線池讓後續執行緒繼續使用。

conn = pool.connection()

cursor = conn.cursor()

cursor.execute('select * from tb1')

result = cursor.fetchall()

conn.close()

func()

****出自武sir

python 資料庫連線池

from dbutils.pooleddb import pooleddb import pymysql pool pooleddb creator pymysql,使用鏈結資料庫的模組 maxconnections 6,連線池允許的最大連線數,0和none表示不限制連線數 mincached 2,...

資料庫連線池 Redis連線池

基本原理 在內部物件池中,維護一定數量的資料庫連線,並對外暴露資料庫連線的獲取和返回方法。如外部使用者可通過getconnection方法獲取資料庫連線,使用完畢後再通過releaseconnection方法將連線返回,注意此時的連線並沒有關閉,而是由連線池管理器 並為下一次使用做好準備。2.作用 ...

基於DBUtils實現資料庫連線池

紅酥手,黃縢酒,滿城春色宮牆柳。東風惡,歡情薄。一懷愁緒,幾年離索。錯 錯 錯。春如舊,人空瘦,淚痕紅浥鮫綃透。桃花落,閒池閣。山盟雖在,錦書難託。莫 莫 莫!mysql資料庫的建立在這就省略了!from flask import flask import pymysql def index 鏈結資...