[英]how to insert a nested dict to dynamodb with boto3?
我們構建了一些嵌套格式的數據,它包含 3 個鍵。 時間、id 和其他 id 包含另一個嵌套字典的地方。 我們不知道如何為此創建表,也不知道如何將此類數據插入到該特定表中。 我們試圖用名為 id 的 hashkey 創建一個表,但是當我們使用
dynamodb.batch_write_item(RequestItems={
'table': [{ 'PutRequest': { 'Item':whatweget}}
}]
})
它表明botocore.exceptions.ClientError: An error occurred (Validation Exception) when calling the BatchWriteItem operation: The prov ided key element does not match the schema
任何人都可以提供一些幫助嗎?
您可以在aws儀表板上使用DynamoDB控制台創建表,還可以通過dynamodb文檔查看詳細說明。
對於嵌套字典,您可以有多個選擇,首先,您可以將id的值插入為xm ls或jso ns,因為dynamodb會將其作為字符串接受,如果您希望對表操作有更嚴格的規則,則可以創建一個id的字段和應該嵌套在id字段中的其他字段,它們不必實際存在於id內
您可以使用多種方法將數據插入到已創建的表中,最簡單的方法是通過aws dynamoDB consol手動添加數據,也可以使用boto3,但是首先必須有一個表。
首先要澄清的是您是如何與 DynamoDB 交互的。 使用 boto3 時,有兩種發出請求的方法:
通常,服務資源更易於使用並且更可取,除非您有特定需求。
另一件需要考慮的事情是存儲嵌套數據會使查詢和過濾變得困難,您可能需要在檢索數據后處理這個問題。
在下文中,我們將創建一個具有單個索引的表,並在旁邊添加其他數據,包括嵌套數據,而不定義其他字段的結構。
假設您使用CLI ,創建一個表:
aws dynamodb create-table \
--table-name my-table \
--attribute-definitions AttributeName=id,AttributeType=S \
--key-schema AttributeName=id,KeyType=HASH \
--billing-mode PAY_PER_REQUEST
這將創建一個具有單個索引id
屬性的表。
以下將插入 2 個項目(最多 25 個),並將自動處理將 Python 數據類型轉換為 DynamoDB 屬性類型 - 這是服務資源相對於低級客戶端的好處之一。
import boto3
dynamodb = boto3.resource('dynamodb')
dynamodb.batch_write_item(
RequestItems={
'my-table': [
{
'PutRequest': {
'Item': {
'id': 'id1',
'newAttribute': 'some new value 1',
'anotherAttribute': 'another new value 1',
'someDict': {
'a': 1,
'b': 2
}
}
},
},
{
'PutRequest': {
'Item': {
'id': 'id2',
'newAttribute': 'some new value 2',
'anotherAttribute': 'another new value 2',
}
},
},
]
}
)
在下文中,我們看到了新屬性的自動創建和數據類型的自動推斷,因此能夠進行查詢和過濾。 map,不是這樣。 如果您決定存儲嵌套數據,請仔細考慮您的查詢策略。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.