標籤:
sqlalchemy資料庫連接池的使用方式是延遲初始化,就是說一開始你調用create_engine(...)後建立的那個資料庫池是空的,你後面通過session.connection()或者engine.connect()才開始建立串連,
每當你建立一個串連,你調用engine.pool.status()就可以看到資料庫連接池處於什麼狀態,下面說明以下status()的輸出說明:
‘Pool size: 16 Connections in pool: 1 Current Overflow: 1 Current Checked out connections: 16‘
Pool size 是你指定的資料庫池的大小
Connections in pool 是在池子中可以使用的串連有多少個
Current Overflow 這個參數說明當前存在的串連數超過Pool size多少個,當overflow (初始為Pool size的負值) 超過max_overflow(預設為10)之後就不能建立新的串連了,只能等待,換句話說:你的資料庫連接池的大小雖然只有Pool size個,
但是你可以建立的串連數則是Pool size+max_overflow, 沒建立一個串連overflow 都會加1,到等於max_overflow時候就不能在建立串連了
Current Checked out connections 是被佔用的串連數
註:這些都是看源碼以及在python終端查看engine/session/engine.pool等的各種函數調用和屬性擷取到的,重要的查看地方: __dict__, __class__;在終端建立串連時注意用變數持有串連,不然你將會看到資料庫連接池的狀態不變
engine.pool.checkedin() 顯示閑著的串連數個數,大小從0 ~ Pool size
engine.pool.checkedout() 顯示被佔用的串連數個數,大小從0 ~ Pool size+max_overflow
調用session.connection()或者engine.connect(),從資料庫池中拿串連,如果有閑著的串連就直接返回,沒有閑著的就看下是否能建立串連(即資料庫池滿了),如果能就建立新串連,如果不能,則等待串連,逾時時間可配置,請查看文檔
調用Connection.close()釋放串連,將資料庫連接放回串連池,而不是真的關閉串連
【筆記】python的sqlalchemy資料庫連接池原理的說明