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