支持具有以下特征的简单连接池
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)
配置更改后从池请求的连接将使用新参数。更改之前获取的连接不受影响,但是当它们关闭(返回到池)时,将在返回到池以供后续连接请求之前使用新参数重新打开。