Упрощая мою программу, у меня есть база данных 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
.
В принципе, в первом вызове (например, после сохранения функции лямбда) он работает так, как предполагается, и возвращает последнее значение в таблице.
Однако для любого другого вызова в течение короткого интервала (несколько минут) он продолжает возвращать одно и то же значение независимо от любых изменений БД.
Сохранение или Ожидание в течение нескольких минут приводит к правильному результату. Возможно ли, что я непреднамеренно кешировал результат?
Решение состоит в том, чтобы использовать conn.autocommit(True)
один раз или conn.commit()
после каждого запроса Select.
С помощью этой опции после каждого запроса выбора будет зафиксирована фиксация. В противном случае последующие выборки выдадут тот же результат.
Кажется, что эта ошибка Bug # 42197 связана с кешем Query и автоматической фиксацией в MySQL. Статус не будет исправлен! Существует также проблема в pymysql, но она закрыта.
Через несколько месяцев это должно быть неуместным, поскольку MySQL 8.0 бросает Query Cache.
conn.autocommit(True)
, увидев этот вопрос .