AWS Lambda - 后续读取未反映数据库写入

问题描述 投票:0回答:1

我有两个 lambda 函数,一个将数据插入数据库 (create_user),另一个 (get_users) 从 AWS RDS 上托管的 MySQL 数据库读取数据。

create_user lambda 的数据库代码如下所示(注意提交):

user = ... # get user from request object

with self.conn.cursor() as cursor:
    cursor.execute(sql.INSERT_USER, (
        user.first_name,
        user.last_name,
        user.birth_date,
        user.sex,
        user.firebase_id
    ))
    self.conn.commit()

以及 get_users lambda 的数据库代码:

with self.conn.cursor() as cursor:
    cursor.execute(sql.GET_ALL_USERS)
    user_rows = cursor.fetchall()

在这两个 lambda 中,我在处理函数之外设置了数据库连接:

conn_params = db_utils.db_connection_parameters()

conn = pymysql.connect(host=conn_params['host'],
                      user=conn_params['username'],
                      password=conn_params['password'],
                      database=conn_params['name'],
                      cursorclass=pymysql.cursors.DictCursor)

def lambda_handler(event, context):
    ...

问题在于 get_users lambda 响应不包含最近使用 create_user lambda 或通过 MySQLWorkbench 插入的用户(再次,记住调用

commit
)。如果我使用 pymysql 或 MySQLWorkbench 连接到数据库,我可以看到新行已插入,但 get_users lambda 在另外 10 分钟左右不会反映此更改。我希望结果几乎立即得到反映。

python mysql aws-lambda amazon-rds pymysql
1个回答
0
投票

将连接从 lambda 处理函数外部移至其中修复了问题:

conn_params = db_utils.db_connection_parameters()

def lambda_handler(event, context):
    user_id = int(event['pathParameters']['id'])

    conn = pymysql.connect(host=conn_params['host'],
                      user=conn_params['username'],
                      password=conn_params['password'],
                      database=conn_params['name'],
                      cursorclass=pymysql.cursors.DictCursor)

我不明白为什么。我一定是误解了数据库连接的工作方式以及它们缓存的内容。

© www.soinside.com 2019 - 2024. All rights reserved.