初めてupdate_itemを使用してdynamodbにデータを保存しようとしています。私のプロジェクトの別の領域では、put_item()を使用しました。この新しいコード領域では、変更されたアイテムのみを保存しています。変更されていないアイテムをデータベースに残しています。したがって、私はupdate_item()を使用する必要があります。しかし、なぜ私の構文がAPI呼び出しに対して正しくないのか分かりません。私はこれをAmazon UIから直接使用しています。ここでAmazon lambda dynamodb update_item()はキーワード引数のみを受け入れます。
は私のpythonのコードです:ここで
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
が出力されます。
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
私はupdate_itemドキュメント(https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_UpdateItem.html)を研究していると、このSO Q &後によると、私のクエリをモデル化していますmkobit(https://stackoverflow.com/users/627727/mkobit):https://stackoverflow.com/a/30604746/8027640
私は、構文のバリエーションを追加しました。私の変数valの代わりに辞書( "S": "maybe this works")を使用し、変数が静的なコンテンツに変更されて動作するかどうかを確認しました。
明らかにこれは構文の問題ですが、私はそれを追跡することができませんでした。提案?
ありがとうございます。キー['UID'] = {"S":イベント['uid']} キー['screenId'] = {"S":イベント['screenid']} 'そして 'ExpressionAttributeNames = { "#attrName":STR(アイテム) }、 ExpressionAttributeValues = { ":ATTRVALUE":{ "S":STR(ヴァル) }}' – Doug