Почему кэшируемый вызов Python AWS для MySQL RDS кэшируется?

0

Упрощая мою программу, у меня есть база данных RDS MySQL, и я хочу создать функцию Lambda, чтобы получить последнее значение, вставленное в определенный столбец.

У меня есть следующий код в лямбда-функции, основанный на этом учебнике AWS:

# Connexion to DB outside the handler, per AWS recomendation 
def lambda_handler(event, context):
    with conn.cursor() as cur:
        cur.execute("SELECT column FROM DB.table ORDER BY create_time DESC LIMIT 1;")  
        row = cur.fetchone()
return row[0]

Я использую pymysql.

В принципе, в первом вызове (например, после сохранения функции лямбда) он работает так, как предполагается, и возвращает последнее значение в таблице.

Однако для любого другого вызова в течение короткого интервала (несколько минут) он продолжает возвращать одно и то же значение независимо от любых изменений БД.

Сохранение или Ожидание в течение нескольких минут приводит к правильному результату. Возможно ли, что я непреднамеренно кешировал результат?

  • 0
    Решил с помощью conn.autocommit(True) , увидев этот вопрос .
Теги:
amazon-web-services
aws-lambda
amazon-rds

1 ответ

1
Лучший ответ

Решение состоит в том, чтобы использовать conn.autocommit(True) один раз или conn.commit() после каждого запроса Select.

С помощью этой опции после каждого запроса выбора будет зафиксирована фиксация. В противном случае последующие выборки выдадут тот же результат.

Кажется, что эта ошибка Bug # 42197 связана с кешем Query и автоматической фиксацией в MySQL. Статус не будет исправлен! Существует также проблема в pymysql, но она закрыта.

Через несколько месяцев это должно быть неуместным, поскольку MySQL 8.0 бросает Query Cache.

  • 1
    Потребность в коммите для выбора очень раздражает.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню