经过长时间的搜索,我找不到我的问题的答案,如果我想要的甚至是可能的。我的问题涉及 Flask API 的 MySQL 连接实现。我希望实现的内容如下:
- 启动 Flask 应用程序时,
create_db_connection
会调用一个方法,该方法会在池对象中创建多个 mysql 连接。 - 对于每个传入的请求,
get_connection
都会调用一个方法,以从 poule 获取一个连接 - 当然,当请求结束时,
close_connection
会调用一个方法来关闭连接并将其标记为在池中可用。
我遇到的问题是持久存储连接池,以便可以将其重新用于每个请求。
create_db_connection 方法:
def create_db_connection():
print("-----INITIALISING-----")
db_pool = mysql.connector.pooling.MySQLConnectionPool(pool_name = "BestLiar_Public_API",
pool_size = 10,
autocommit = True,
pool_reset_session = True,
user = 'user',
password = 'pass',
host = 'hostel',
database =' db')
print("-----DB POOL INITIALISED-----")
// SOLUTION TO PERSISTENTLY SAVE db_pool OBJECT
get_connection 方法:
def __enter__(self):
try:
// SOLUTION TO FETCH THE db_pool OBJECT > NAMED AS db_pool IN LINE BELOW
self.con = db_pool.get_connection()
self.cur = self.con.cursor(dictionary=True)
if self.con.is_connected():
return {'cur': self.cur, 'con': self.con}
else:
raise NoConnectionError("No database connection", "Pool connection not connected")
except mysql.connector.PoolError:
raise SystemOverload("Too many requests, could not process","No pool connection available")
except:
raise NoConnectionError("No database connection", "Unknown reason")
close_connection 方法:
def __exit__(self, type, value, traceback):
if self.con:
self.cur.close()
self.con.close()
我尝试将 db_pool 对象存储为全局变量(不受欢迎)并尝试了烧瓶全局对象(仅适用于一个请求)。谁有解决方案的钥匙?