支援簡單的連線池,具有以下特性:
mysql.connector.pooling
模組實作了連線池。連線池會開啟多個連線,並在提供連線給請求者時處理執行緒安全。
連線池的大小可以在建立連線池時設定。之後無法調整大小。
連線池可以在建立連線池時命名。如果沒有指定名稱,則會使用連線參數產生一個名稱。
連線池名稱可以從連線池或從連線池取得的連線中檢索。
可以有多個連線池。這使得應用程式可以支援連線到不同 MySQL 伺服器的連線池,例如。
對於每個連線請求,連線池會提供下一個可用的連線。不會使用循環或其他排程演算法。如果連線池耗盡,則會引發
PoolError
。可以重新設定連線池使用的連線參數。這些參數適用於之後從連線池取得的連線。不支援透過呼叫連線的
config()
方法來重新設定從連線池取得的個別連線。
可以從連線池功能受益的應用程式包括:
維護與多個 MySQL 伺服器的多個連線,並要求連線隨時可用的中介軟體。
可以開啟更多「永久」連線到 MySQL 伺服器的網站。
連線池可以隱式或顯式建立。
若要隱式建立連線池:開啟連線並指定一個或多個與連線池相關的引數 (pool_name
、pool_size
)。例如
dbconfig = {
"database": "test",
"user": "joe"
}
cnx = mysql.connector.connect(pool_name = "mypool",
pool_size = 3,
**dbconfig)
連線池名稱僅限於字母數字字元和特殊字元 .
、_
、*
、$
和 #
。連線池名稱的長度不得超過 pooling.CNX_POOL_MAXNAMESIZE
個字元 (預設值為 64)。
連線池大小必須大於 0 且小於或等於 pooling.CNX_POOL_MAXSIZE
(預設值為 32)。
在 pool_name
或 pool_size
引數存在的情況下,Connector/Python 會建立新的連線池。如果未指定 pool_name
引數,則 connect()
呼叫會自動產生名稱,該名稱由提供的 host
、port
、user
和 database
連線引數依序組成。如果未指定 pool_size
引數,則預設大小為 5 個連線。
後續呼叫 connect()
並命名相同連線池的呼叫會從現有的連線池傳回連線。任何 pool_size
或連線參數引數都會被忽略,因此下列 connect()
呼叫與先前顯示的原始 connect()
呼叫等效
cnx = mysql.connector.connect(pool_name = "mypool", pool_size = 3)
cnx = mysql.connector.connect(pool_name = "mypool", **dbconfig)
cnx = mysql.connector.connect(pool_name = "mypool")
透過呼叫帶有與連線池相關的引數的 connect()
所取得的集區連線具有 PooledMySQLConnection
類別 (請參閱第 10.4 節「pooling.PooledMySQLConnection 類別」)。PooledMySQLConnection
集區連線物件與 MySQLConnection
非集區連線物件類似,但有以下差異:
若要釋放從連線池取得的集區連線,請呼叫其
close()
方法,就像任何非集區連線一樣。但是,對於集區連線,close()
實際上不會關閉連線,而是將其傳回連線池,並使其可供後續連線請求使用。無法使用集區連線的
config()
方法重新設定集區連線。連線變更必須透過連線池物件本身完成,如稍後所述。集區連線具有
pool_name
屬性,該屬性會傳回連線池名稱。
若要顯式建立連線池:建立 MySQLConnectionPool
物件 (請參閱第 10.3 節「pooling.MySQLConnectionPool 類別」)
dbconfig = {
"database": "test",
"user": "joe"
}
cnxpool = mysql.connector.pooling.MySQLConnectionPool(pool_name = "mypool",
pool_size = 3,
**dbconfig)
若要從連線池請求連線,請使用其 get_connection()
方法
cnx1 = cnxpool.get_connection()
cnx2 = cnxpool.get_connection()
當您顯式建立連線池時,可以使用連線池物件的 set_config()
方法重新設定連線池連線參數
dbconfig = {
"database": "performance_schema",
"user": "admin",
"password": "password"
}
cnxpool.set_config(**dbconfig)
在組態變更後從連線池請求的連線會使用新的參數。在變更之前取得的連線不受影響,但當它們關閉 (傳回連線池) 時,會使用新參數重新開啟,然後由連線池傳回以供後續連線請求使用。