2017-04-21 20 views
1

私は次のコード行がありますどのようにマップをDynamoDBテーブルに挿入しますか?

table.put_item(Item={'filename' : key, 'status' : {'M' : iocheckdict }}) 

iocheckdictは次のようになります。私は、コードを実行しているときに

{'A': 'One', 'C': 'Three', 'D': 'Four', 'B': 'Two', 'E': 'Five'} 

、私はこのエラーを取得する:

An error occurred (ValidationException) when calling the PutItem operation: One or more parameter values were invalid: Type mismatch for key status expected: S actual: M 

データの種類としてMと書いてありますが、なぜこれを取得していますか?

PS:私は2列filenamestatus私のテーブルのテーブルの


属性の定義があります:私はstatusの種類がSであることを理解し

"AttributeDefinitions": [ 
    { 
     "AttributeName": "filename", 
     "AttributeType": "S" 
    }, 
    { 
     "AttributeName": "status", 
     "AttributeType": "S" 
    } 
], 

を、私の避難所テーブルを作成中にマップタイプが見つかりませんでした。私が見つけたのはstringbinarynumberです。

+0

に挿入しますM:{"Name":{"S": "Joe"}、 "Age":{"N": "35"}} 'のように、' dict'部分は'{" S ":" Joe "}、" Age ":{" N ":" 35 "}}'のようなものです。 –

+0

@EmreSevinç私は私に辞書を '' N ":" 0 "}、{" N ":" 0 "}、{" N ":" 0 " "0"}、 "S4":{"N": "0"}、 "S5":{"N": "0"}}。しかし、この文は次のとおりです: 'table.put_item(Item = {'filename':key、 'status':{'M':iocheckdict}})'私には同じエラーが返されます。回答を書くことは可能でしょうか? – Dawny33

+0

質問を編集してテーブルに関する詳細情報を追加した場合などに役立ちます。あなたのテーブルのスキーマの詳細。なぜなら、あなたのフィールド 'filename'と' status'の型はあなたの変数 'key'と' iocheckdict'の型と一致しないかもしれないと思うからです。 –

答えて

1

簡単な方法は、あなたが渡す必要がhttp://boto3.readthedocs.io/en/latest/reference/services/dynamodb.html#DynamoDB.Client.put_itemによるとDynamoDBの

dynamodb = boto3.resource('dynamodb') 
table = dynamodb.Table("table_name") 

item={} 
item['filename'] = key 
item['status'] = {'A': 'One', 'C': 'Three', 'D': 'Four', 'B': 'Two', 'E': 'Five'} 

table.put_item(item)