aws-lambda - 是否可以在 lambda_handler 中包含 connect() 以便在使用后关闭连接?
问题描述
我编写了一个 lambda 函数来访问 MySQL 数据库并获取数据,即获取用户数,但不会获取任何实时更新,除非重新建立连接。并且在返回之前关闭 lambda_handler 内部的连接,会在下一次调用时导致连接错误。
我正在使用的查询是->select count(*) from users
import os
import pymysql
import json
import logging
endpoint = os.environ.get('DBMS_endpoint')
username = os.environ.get('DBMS_username')
password = os.environ.get('DBMS_password')
database_name = os.environ.get('DBMS_name')
DBport = int(os.environ.get('DBMS_port'))
logger = logging.getLogger()
logger.setLevel(logging.INFO)
try:
connection = pymysql.connect(endpoint, user=username, passwd=password, db=database_name, port=DBport)
logger.info("SUCCESS: Connection to RDS mysql instance succeeded")
except:
logger.error("ERROR: Unexpected error: Could not connect to MySql instance.")
def lambda_handler(event, context):
try:
cursor = connection.cursor()
............some.work..........
............work.saved..........
cursor.close()
connection.close()
return .....
except:
print("ERROR")
上面的代码在第二次使用后导致连接错误,第一次工作正常并给出输出,但第二次运行 lambda 函数时导致连接错误。
删除此行后->
connection.close()
代码工作正常,但插入数据库的实时数据不是由 lambda 获取的,但是当我 2 分钟不使用 lambda 函数时,再次使用它后,它会获取新值.
所以,为了纠正这个问题,我把 connect() 放在了 lambda_handler 里面,问题就解决了,它还在插入时获取了实时数据。
import os
import pymysql
import json
import logging
endpoint = os.environ.get('DBMS_endpoint')
username = os.environ.get('DBMS_username')
password = os.environ.get('DBMS_password')
database_name = os.environ.get('DBMS_name')
DBport = int(os.environ.get('DBMS_port'))
logger = logging.getLogger()
logger.setLevel(logging.INFO)
def lambda_handler(event, context):
try:
try:
connection = pymysql.connect(endpoint, user=username, passwd=password, db=database_name, port=DBport)
except:
logger.error("ERROR: Unexpected error: Could not connect to MySql instance.")
cursor = connection.cursor()
............some.work..........
............work.saved..........
cursor.close()
connection.close()
return .....
except:
print("ERROR")
所以,我想知道,这样做是否正确,或者有其他方法可以解决这个问题,我试图解决这个问题几天,最后这个解决方案正在工作,但不确定它是否会是一个这样做或不这样做的好习惯。
如果与数据库的连接数增加,会出现任何问题吗?还是任何类型的资源问题?
解决方案
推荐阅读
- javascript - React Redux 不更新 initialState
- java - 如何在java中从数据库中获取arraylist数据
- c++ - MQTT 客户端(Esp32)中的多个主题要发送到 Raspberry Pi(MQTT 代理)
- javascript - 我正在使用来自 w3school 的灯箱代码..位置固定的模态 div 正在关闭屏幕在 microsoft edge 但在 chrome 中它适合屏幕如何
- sql - 选择不同条件的多个计数,只计数不同,在一行中返回结果
- html - 屏幕阅读器不会读取列表大小/数量
- 内的元素
- 或者
- 内的元素
- mysql - 如何编写这些复杂的 MySQL 查询?
- r - 如何使用winzip解压缩R中的.Z文件
- reactjs - Nextjs 和 Material UI
- angular - 具有strictPropertyInitialization = true的角度HTTP绑定和服务中的HTTP请求?