0

经过长时间的搜索,我找不到我的问题的答案,如果我想要的甚至是可能的。我的问题涉及 Flask API 的 MySQL 连接实现。我希望实现的内容如下:

  1. 启动 Flask 应用程序时,create_db_connection会调用一个方法,该方法会在池对象中创建多个 mysql 连接。
  2. 对于每个传入的请求,get_connection都会调用一个方法,以从 poule 获取一个连接
  3. 当然,当请求结束时,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 对象存储为全局变量(不受欢迎)并尝试了烧瓶全局对象(仅适用于一个请求)。谁有解决方案的钥匙?

4

0 回答 0