python - 为什么要缓存对 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 更改无关。
保存或等待几分钟会导致正确的结果。是否有可能我无意中缓存了结果?
解决方案
解决方案是使用conn.autocommit(True)
一次或conn.commit()
在每个 Select 查询之后使用。
使用此选项,每次选择查询后都会有一个提交。否则,后续选择将呈现相同的结果。
此错误似乎是与 MySQL 中的查询缓存和自动提交相关的错误 #42197 。状态不会修复!pymysql中也存在问题,但已关闭。
几个月后,这应该无关紧要了,因为MySQL 8.0 正在删除 Query Cache。
推荐阅读
- php - 反射方法的PHP继承
- node.js - Mongodb查询所有继承父`_id`的记录下栈
- api - 尝试 API 配置时收到 Code 503 后端错误
- azure - 如何使用 React Azure 媒体播放器播放托管在 Azure 的 blob 容器中的视频?
- slice - 从数组中切片 6 个随机项
- clojurescript - 在重新框架上使用反应数据网格
- jakarta-ee - 以编程方式覆盖 Payara 中的服务器配置事务超时设置
- html - 使用变量更改输入的背景颜色
- matrix - 如何将矩阵与嵌套循环相乘(python)
- php - Memcached 无法在特定的 docker 容器中自动运行