【问题标题】:Python Aws lambda function not fetching the rds Mysql table value in realtimePython Aws lambda函数未实时获取rds Mysql表值
【发布时间】:2017-10-12 04:01:08
【问题描述】:

我有一个使用 python/pymysql 和 AWS rds Mysql 实例作为后端的 AWS lambda。它连接并运行良好,我还可以从我的 android 应用程序访问 lambda。 我遇到的问题是在我使用本地机器 mysql 工作台成功地将值插入 rds mysql 表并从 AWS 控制台运行 lambda 函数后,它没有立即显示新插入的值。在 python aws lambda 代码上,我没有关闭连接或游标。 但是,如果我在 AWS 控制台上编辑 lambda 函数,我的意思是插入一个空格并再次从 AWS 控制台运行 lambda,它会获取新插入的值。 如何配置/编码以使 lambda 实时获取 db 值。

【问题讨论】:

  • 你错过了conn.commit() 吗?
  • 您好,谢谢。 conn.commit() 在 select 语句之后。我没有使用任何插入语句。

标签: python amazon-web-services aws-lambda amazon-rds


【解决方案1】:

许多人在编写 lambda 时使用以下方法。

# open connection
conn = pymysql...

def respond:
  return message

def handler(event, context):
  use conn
  respond

如果调用“关闭”在一起,其中关闭由 AWS 定义,则这具有重用数据库连接“conn”的效果。问题是这会给你缓存读取即使你改变了表。原因是 conn 不会超出范围并在重新调用 lambda 时被重用。通过将其带入处理程序,它会超出范围并在每次调用时关闭。这会带来性能损失,但您会获得与数据库当前状态相同的数据。

lambda 应该是:

def respond:
  return message

def handler(event, context):
  # open connection
  conn = pymysql...
  use conn
  respond

我可能不知道确切的原因,但这对我有用。顺便说一句,我尝试使用 NO_SQL_CACHE、自动提交、显式提交。在我让系统每次都重新连接之前,没有任何效果。 YMMV!

【讨论】:

    【解决方案2】:

    AWS 建议建立一个全局连接(在您的处理程序函数定义之前)以提高性能。想法是不必建立新连接,并且重复使用与数据库的先前连接,即使在紧密连接中运行多个 Lambda 实例时也是如此。但是,如果您的用例涉及通过 Lambda 引用 MySQL 表,特别是如果表定期更新,我建议您在本地(在处理程序函数内)启动连接对象,然后在运行查询后将其关闭。这与@dnevins 的回应非常一致,也是它对我有用的唯一方法。希望这会有所帮助!

    【讨论】:

      猜你喜欢
      • 2017-10-05
      • 1970-01-01
      • 2017-07-05
      • 2020-08-30
      • 1970-01-01
      • 2016-04-22
      • 1970-01-01
      • 2021-07-13
      • 2020-12-08
      相关资源
      最近更新 更多