支持具有以下特征的简单连接池:
该
mysql.connector.pooling
模块实现池化。在向请求者提供连接时,池会打开多个连接并处理线程安全。
连接池的大小在池创建时是可配置的。此后无法调整大小。
连接池可以在池创建时命名。如果没有给出名称,则使用连接参数生成一个。
可以从连接池或从中获取的连接中检索连接池名称。
可以有多个连接池。例如,这使应用程序能够支持到不同 MySQL 服务器的连接池。
对于每个连接请求,池提供下一个可用连接。不使用循环或其他调度算法。如果池耗尽,
PoolError
则引发 a。可以重新配置池使用的连接参数。这些适用于此后从池中获得的连接。
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
参数,连接器/Python 创建新池。如果pool_name
未给出参数,则connect()
调用会自动生成名称,该名称由给出的
host
、port
、
user
和database
connection 参数中的任何一个组成,并按该顺序排列。如果
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)
配置更改后从池中请求的连接使用新参数。更改之前获得的连接不受影响,但是当它们关闭(返回到池中)时,在池返回以供后续连接请求之前使用新参数重新打开。