【筆記】python的sqlalchemy數據庫連接池原理的說明


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()釋放連接,將數據庫連接放回連接池,而不是真的關閉連接

 


免責聲明!

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



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