簡體   English   中英

如何使用 boto3 將嵌套字典插入 dynamodb?

[英]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,不是這樣。 如果您決定存儲嵌套數據,請仔細考慮您的查詢策略。

顯示插入項目列表的 DynamoDB 表瀏覽器

顯示嵌套插入項詳細信息的 DynamoDB 表瀏覽器

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM