@ArtiomK

Как правильно закрывать Pool соединений MySQL Python?

Использую Pool соединений в приложение Flask, чтобы было несколько соединений, которые по необходимости забирались и возвращались в Pool без закрытия соединения после использования в запросе. Реализовал это через context manager:

from contextlib import contextmanager
import mysql.connector
from mysql.connector.errors import Error
from mysql.connector import pooling

SQL_CONN_POOL = pooling.MySQLConnectionPool(
    pool_name="mysqlpool",
    pool_size=1,
    user=DB_USER,
    password=DB_PASS,
    host=DB_HOST,
    database=DATABASE,
    auth_plugin=DB_PLUGIN
)

@contextmanager
def mysql_connection_from_pool() -> "conn":
    conn_pool = SQL_CONN_POOL  # get connection from the pool, all the rest is the same
    _conn = conn_pool.get_connection()
    try:
        yield _conn
    except (Exception, Error) as ex:
        # if error happened all made changes during the connection will be rolled back:
        _conn.rollback()
        # this statement re-raise error to let it be handled in outer scope:
        raise
    else:
        # if everything is fine commit all changes to save them in db:
        _conn.commit()
    finally:
        # actually it returns connection to the pool, rather than close it
        _conn.close()


@contextmanager
def mysql_curs_from_pool() -> "curs":
    with mysql_connection_from_pool() as _conn:
        _curs = _conn.cursor()
        try:
            yield _curs
        finally:
            _curs.close()


Я знаю что если соединения c DB не используются определенное время, то MySQL их завершает. Время этого завершения определяется глобальными настройками MySQL к которым я доступа не имею. По поводу Pool однозначного ответа я не нашел. Предположим я провожу отладку приложения и периодически его закрываю, при принудительном закрытии приложения, что происходит с соединениями Pool? Как Pool поддерживает входящие в него соединения если ими долго не пользуются? Как на уровне Python/Flask завершать Pool?

Дополнение: На сегодняшний момент не понял преимуществ SQL Alchemy, кроме как возможности легко поменять DB например с MySQL на PostgreSQL, поэтому использую менеджер контекста и стандартный запросы SQL.
  • Вопрос задан
  • 413 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы