使用事件 ['body'] 使用 Python Lambda 动态 Insert/Update DynamoDB 中的项目

Dynamically Insert/Update Item in DynamoDB With Python Lambda using event['body']

我正在研究从 API 网关调用并更新 dynamoDB 中的信息的 lambda 函数。我有一半的工作非常动态,而且我有点坚持更新。这是我正在使用的内容:

dynamoDB table 分区键为 guild_id

我的虚拟 json 代码我正在使用:

{
  "guild_id": "126",
  "guild_name": "Posted Guild",
  "guild_premium": "true",
  "guild_prefix": "z!"
}

最后是 lambda 代码:

import json
import boto3

def lambda_handler(event, context):
    client = boto3.resource("dynamodb")
    table = client.Table("guildtable")
    itemData = json.loads(event['body'])
    
    guild = table.get_item(Key={'guild_id':itemData['guild_id']})
    
    #If Guild Exists, update
    if 'Item' in guild:
      table.update_item(Key=itemData)
      
      responseObject = {}
      responseObject['statusCode'] = 200
      responseObject['headers'] = {}
      responseObject['headers']['Content-Type'] = 'application/json'
      responseObject['body'] = json.dumps('Updated Guild!')
      
      return responseObject
    
    #New Guild, Insert Guild
    table.put_item(Item=itemData)
    
    responseObject = {}
    responseObject['statusCode'] = 200
    responseObject['headers'] = {}
    responseObject['headers']['Content-Type'] = 'application/json'
    responseObject['body'] = json.dumps('Inserted Guild!')
      
    return responseObject

插入部分工作得很好,我如何用更新项目完成类似的方法?我希望它尽可能动态,这样我就可以向它抛出任何 json 代码(在合理范围内)并将其存储在数据库中。我希望我的更新方法考虑到在路上添加字段并处理这些字段

我收到以下错误:

Lambda execution failed with status 200 due to customer function error: An error occurred (ValidationException) when calling the UpdateItem operation: The provided key element does not match the schema. 

A “提供的关键元素与模式不匹配”​​ 错误表示 Key(= 主键)有问题。您的模式的主键是 guild_id: string。 Non-key 属性属于 AttributeUpdate 参数。见 docs.

您的 itemdata 似乎包含 non-key 属性。还要确保 guild_id 是字符串 "123" 而不是数字类型 123.

goodKey={"guild_id": "123"}

table.update_item(Key=goodKey, UpdateExpression="SET ...")

docs 有一个完整的 update_item 示例。