为什么要缓存对 MySQL RDS 的 AWS Lambda python 调用?

Why is an AWS Lambda python call to a MySQL RDS being cached?

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

我在 lambda 函数中得到了以下代码,基于 this AWS tutorial:

# 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 函数之后)它按预期工作,并且 return 是 table 中的最后一个值。

但是,对于短时间间隔(几分钟)内的任何其他调用,它会继续 return 相同的值,与任何数据库更改无关。

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

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

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

这个错误好像是Bug #42197 related to Query cache and auto-commit in MySQL. The status is won't fix! There is also an issue in pymysql但是已经关闭了。

几个月后,这应该是无关紧要的,因为 MySQL 8.0 is dropping Query Cache