【问题标题】:Syntax Error on AWS DynamoDB Update_Item (lambda function)AWS DynamoDB Update_Item 上的语法错误(lambda 函数)
【发布时间】:2022-08-02 14:20:21
【问题描述】:

我正在尝试从 lambda 函数更新 dynamoDB 表中的当前项目,并且收到没有信息的语法错误。当我跟随许多在线论坛和博客文章到达这个阶段时,我感到很困惑,而且代码似乎相同。我的 put_item sn-p 按预期工作,因此 dynamoDB 已正确连接到 lambda 函数。任何帮助将非常感激。

我的代码如下:

update = client.update_item(
        TableName=\'sample\',
        Key={\'id\': {\'S\': body[\"id\"]},
        UpdateExpression=\"set cancelled = :g\",
        ConditionExpression = \'attribute_exists(id)\',
        ExpressionAttributeValues={
            \':g\': \"yes\"
        },
        ReturnValues=\"UPDATED_NEW\"
)

我得到的日志如下:

{
    \"errorMessage\": \"Syntax error in module \'lambda_function\': invalid syntax (lambda_function.py, line 89)\",
    \"errorType\": \"Runtime.UserCodeSyntaxError\",
    \"requestId\": \"86785a61-c526-4647-9a2c-b51466ddb8a6\",
    \"stackTrace\": [
    \"  File \\\"/var/task/lambda_function.py\\\" Line 89\\n         UpdateExpression=\\\"set canceled = :g\\\",\\n\"
  ]
}

解决此问题后,我收到以下错误

{
  \"errorMessage\": \"Parameter validation failed:\\nInvalid type for parameter ExpressionAttributeValues.:g, value: yes, type: <class \'str\'>, valid types: <class \'dict\'>\",
  \"errorType\": \"ParamValidationError\",
  \"requestId\": \"b7710541-b398-4f2f-9f67-7eaafb1426bc\",
  \"stackTrace\": [
    \"  File \\\"/var/task/lambda_function.py\\\", line 84, in lambda_handler\\n    update = client.update_item(\\n\",
    \"  File \\\"/var/runtime/botocore/client.py\\\", line 391, in _api_call\\n    return self._make_api_call(operation_name, kwargs)\\n\",
    \"  File \\\"/var/runtime/botocore/client.py\\\", line 691, in _make_api_call\\n    request_dict = self._convert_to_request_dict(\\n\",
    \"  File \\\"/var/runtime/botocore/client.py\\\", line 739, in _convert_to_request_dict\\n    request_dict = self._serializer.serialize_to_request(\\n\",
    \"  File \\\"/var/runtime/botocore/validate.py\\\", line 360, in serialize_to_request\\n    raise ParamValidationError(report=report.generate_report())\\n\"
  ]
}
  • @ThierryLathuille 非常感谢你,不知道我是怎么错过的。不幸的是,这又弹出了一个错误,我已经更新了帖子

标签: python aws-lambda amazon-dynamodb


【解决方案1】:

看起来您选择在最低线路级别与 DynamoDB 交互,因此您需要传递“S”字符串类型提示:

":g": { "S": "yes" },

这可能会让人感到困惑,因为您可以在各种抽象级别与 DynamoDB 进行交互。我建议升级一个级别并使用.resource 而不是.client

这是一个示例,您不需要“S”提示和类似的东西: https://github.com/aws-samples/aws-dynamodb-examples/blob/master/DynamoDB-SDK-Examples/python/WorkingWithItems/updating_item.py

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-01-27
    • 1970-01-01
    • 1970-01-01
    • 2016-11-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多