처음으로 update_item을 사용하여 dynamodb에 데이터를 저장하려고합니다. 내 프로젝트의 다른 영역에서 나는 put_item()을 성공적으로 사용했다. 이 새로운 코드 영역에서는 변경된 항목 만 저장하고 변경되지 않은 항목은 db에 남겨 둡니다. 따라서 update_item()을 사용해야합니다. 그러나 API 호출에 대한 구문이 올바르지 않은 이유를 알아낼 수 없습니다. Amazon UI에서 직접 사용하고 있습니다. 나는 update_item 워드 프로세서 (https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_UpdateItem.html)을 연구하고이 SO Q & 바이 후에 내 쿼리를 모델로 한Amazon lambda dynamodb update_item()은 키워드 인수 만 허용합니다.
START RequestId: 2da9412a-b03d-11e7-9dc8-8fcb305833f6 Version: $LATEST
The event: {'article': '<p>↵ First!↵</p>', 'screenid': '13', 'uid': '0', 'section1': '<h1>↵ Second↵</h1>'}
Key: {'UID': '0', 'screenId': '13'}
Saving!
update_item() only accepts keyword arguments.: TypeError
Traceback (most recent call last):
File "/var/task/saveScreenData.py", line 30, in saveScreenData
":attrValue" : val
File "/var/runtime/botocore/client.py", line 310, in _api_call
"%s() only accepts keyword arguments." % py_operation_name)
TypeError: update_item() only accepts keyword arguments.
END RequestId: 2da9412a-b03d-11e7-9dc8-8fcb305833f6
: 여기
from __future__ import print_function
import json
import boto3
print('Loading function')
def saveScreenData(event, context):
dynamodb = boto3.client('dynamodb', region_name='us-east-1', endpoint_url="https://dynamodb.us-east-1.amazonaws.com")
print('The event: {}'.format(event))
key = {}
key['UID'] = event['uid']
key['screenId'] = event['screenid']
print('Key: {}'.format(key))
for item, val in event.items():
if item != 'uid' and item != 'screenid':
print("Saving!")
response = dynamodb.update_item({
"TableName" : "ScreenData",
"Key" : key,
"UpdateExpression" : "SET #attrName = :attrValue",
"ExpressionAttributeNames" : {
"#attrName" : item
},
"ExpressionAttributeValues" : {
":attrValue" : val
}
})
print('Response: {}'.format(response))
return response
이 출력됩니다 : 여기
내 파이썬 코드 mkobit (
https://stackoverflow.com/users/627727/mkobit) :
https://stackoverflow.com/a/30604746/8027640
필자는 구문을 변형하여 사전 ("S": "maybe this works")을 내 변수 val 대신 사용하고 정적 콘텐츠로 변수를 변경하여 작동하는지 확인했지만 행운은 없었습니다.
분명히 이것은 구문 문제이지만이를 추적 할 수 없었습니다. 제안?
고맙습니다. 다음과 같은 변경이 필요합니다 : key [ 'UID'] = { "S": event [ 'uid']} key [ 'screenId'] = { "S": event [ 'screenid']}' 및 'ExpressionAttributeNames = { "#attrName"STR (항목) } = { ExpressionAttributeValues "ATTRVALUE"{ "S"STR (val) 인 }}' – Doug