首页 > 解决方案 > 为什么要缓存对 MySQL RDS 的 AWS Lambda python 调用?

问题描述

简化我的程序,我有一个 MySQL RDS DB,我想开发一个 Lambda 函数来获取插入特定列的最后一个值。

根据这个 AWS 教程,我在 lambda 函数中有以下代码:

# 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.

基本上,在第一次调用中(例如,在保存 lambda 函数之后)它按预期工作,并返回表中的最后一个值。

但是,对于短时间内(几分钟)内的任何其他调用,它会继续返回相同的值,而与任何 DB 更改无关。

保存或等待几分钟会导致正确的结果。是否有可能我无意中缓存了结果?

标签: pythonmysqlamazon-web-servicesaws-lambdaamazon-rds

解决方案


解决方案是使用conn.autocommit(True)一次或conn.commit()在每个 Select 查询之后使用。

使用此选项,每次选择查询后都会有一个提交。否则,后续选择将呈现相同的结果。

此错误似乎是与 MySQL 中的查询缓存和自动提交相关的错误 #42197 。状态不会修复!pymysql中也存在问题,但已关闭。

几个月后,这应该无关紧要了,因为MySQL 8.0 正在删除 Query Cache


推荐阅读