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 鏈結資...