#python #flask #mysql-connector #multi-database-connections
Вопрос:
После долгих поисков я не смог найти ответа на свой вопрос, возможно ли вообще то, чего я желаю. Мой вопрос касается реализации соединения MySQL для API Flask. То, что я хочу реализовать, заключается в следующем:
- При запуске приложения 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 в качестве глобальной переменной (нежелательно) и попробовал глобальный объект flask (работает только для одного запроса).
У кого-нибудь есть ключ к разгадке?
Комментарии:
1. Можете ли вы отличить, почему/как «постоянное хранение» и «глобальная переменная» отличаются друг от друга?
2. Если вы посмотрите на это таким образом, вы правы, поскольку концептуально это одно и то же, но глобальные переменные не работают в некоторых средах, поэтому я рассматриваю альтернативы. Я хочу, чтобы пул подключений к базе данных работал в течение всего сеанса Flask, что не может быть гарантировано с помощью глобальной переменной.