为什么AWS Lambda调用MySQL RDS时会被缓存?

3
简化我的程序,我有一个MySQL RDS数据库,我想开发一个Lambda函数来获取特定列中插入的最后一个值。
我在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

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

然而,在短时间内的任何其他调用(几分钟内),它都会继续返回相同的值,而不考虑任何数据库更改。

保存或等待几分钟会导致正确的结果。 可能我不经意地缓存了结果吗?


在查看这个问题后,使用conn.autocommit(True)解决了它。 - undefined
1个回答

4
解决方法是在每个Select查询后使用conn.commit()或者conn.autocommit(True)
使用该选项后,每个选择查询都会有一个提交。否则,后续的选择将呈现相同的结果。
这个错误似乎与MySQL中的查询缓存和自动提交有关,详见Bug #42197。状态是不修复的!在pymysql中也有一个已关闭的问题
在几个月后,这将不再相关,因为MySQL 8.0正在放弃查询缓存

3
需要在选择操作中进行提交实在是非常令人烦恼。 - undefined

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接