![](/img/trans.png)
[英]Amazon lambda dynamodb update_item() only accepts keyword arguments
[英]Syntax Error on AWS DynamoDB Update_Item (lambda function)
我正在嘗試從 lambda function 更新 dynamoDB 表中的當前項目,並且收到沒有信息的語法錯誤。 當我跟隨許多在線論壇和博客文章到達這個階段時,我感到很困惑,而且代碼似乎相同。 我的 put_item 片段按預期工作,因此 dynamoDB 已正確連接到 lambda function。 任何幫助將非常感激。
我的代碼如下:
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"
]
}
看起來您選擇在最低線路級別與 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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.