Как закрыть соединение после закрытия курсора в блоке try-Кроме? - PullRequest
0 голосов
/ 26 июня 2019

Я делаю код в функции Lambda (Python 3.6), используя экземпляр RDS.Проблема в том, что если я не делаю conn.close (), происходит увеличение количества соединений в RDS.Это приведет к ошибкам в ответе API [Внутренняя ошибка сервера].

Дело в том, что мы пробовали в блоке finally, но не получили должного результата, как показано ниже.

try:
    conn = pymysql.connect(rds_host, user=name, passwd=password, db=db_name, port=3268, connect_timeout=30)
except:
    logger.error("ERROR: Unexpected error: Could not connect to MySql instance.")
    sys.exit()
def handler(event, context):
    try:
        with conn.cursor() as cur:
           cur.execute('SELECT * from OrderMaster')
           cur.close()
           return {'statusCode':200,"headers":{"access-control-allow-origin":"{}".format(headers)},"body":json.dumps(out)}
    except Exception as e:
        logger.error("error")
    finally:
        conn.close()

Ответы [ 2 ]

0 голосов
/ 27 июня 2019
def handler(event, context):
    try:
       with pymysql.connect(rds_host, user=name, passwd=password, db=db_name, port=3268, connect_timeout=30) as cur:
          cur.execute('SELECT * from OrderMaster')
          return {'statusCode':200,"headers":{"access-control-allow-origin":"{}".format(headers)},"body":json.dumps(out)}
    except Exception as e:
       logger.error("error") 
    finally: 
       cur.close()
0 голосов
/ 26 июня 2019

Я не могу придумать причину, чтобы открыть соединение за пределами вашей функции-обработчика, но закрыть его внутри него. Откройте соединение с помощью оператора with внутри вашей функции-обработчика.

def handler(event, context):
    try:
        with pymysql.connect(rds_host, user=name, passwd=password, db=db_name, port=3268, connect_timeout=30) as conn
            with conn.cursor() as cur:
               cur.execute('SELECT * from OrderMaster')
               return {'statusCode':200,"headers":{"access-control-allow-origin":"{}".format(headers)},"body":json.dumps(out)}
    except Exception as e:
        logger.error("error")

Вам также не нужно закрывать курсор, потому что ваш оператор with делает это за вас. Это касается и связи.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...