簡體   English   中英

DynamoDB 使用 AWS CLI 放置項目

[英]DynamoDB putting item using AWS CLI

我正在嘗試使用本地 DynamoDB 的 AWS CLI。

在工作的過程中,我發現了一些問題。

插入和檢索項目 | DynamoDB,解釋道。 顯示如何使用 JSON 格式創建表。 但這對我不起作用。 所以我不得不使用Basic Operations for Tables - Amazon DynamoDB 無論如何,它奏效了。

但是麻煩的是放東西的時候。

我試圖像這樣將項目添加到本地數據庫:

aws dynamodb put-item \
    --table-name UsersTable \
    --item '{
      "Username": {"S": "alexdebrie"}
    }' \
    --endpoint-url http://localhost:8000

但是出現了這樣的錯誤:

未知選項:{S:, alexdebrie}, }',用戶名:

我該如何處理?

PS:我使用的是 Windows 而不是\ ,我使用了^

這是一個適用於 Windows 的單行示例:

aws dynamodb put-item --table-name test --item "{\"id\":{\"S\":\"mars\"},\"miles\":{\"N\":\"999\"}}"

所以,在你的情況下:

aws dynamodb put-item --table-name UsersTable --item "{\"Username\":{\"S\":\"alexdebrie\"}}" --endpoint-url http://localhost:8000

需要注意的幾點:

  • 盡量避免在您的命令中使用多行
  • 用雙引號將整個項目包括在內
  • 先於項目內的每個雙引號用反斜杠如\\"id\\"
  • 如果您的屬性值是數字,您仍必須引用其值,例如\\"N\\":\\"999\\"

我感覺到你的痛苦。 這太糟糕了。

您可能還想考慮使用--cli-input-json在 JSON 文件中提供參數

嘗試使用 git bash,這解決了我的問題。 我在 Windows 中使用 cmd,但我遇到了同樣的格式問題。 相同的命令適用於 git bash。

代替"\\"

像這樣使用

aws dynamodb put-item \
    --table-name UsersTable \
    --item '{
      \"Username\": {\"S\": \"alexdebrie\"}
    }' \

我相信這個問題只在 Windows 上而不是在 Mac 或 linux 上是特定的。 但我同意@Jnana Palai。 但請確保 JSON 也包含在“ not ”中

同樣:aws dynamodb put-item
--table-name 用戶表
--item "{ "用戶名": {"S": "alexdebrie"} }" \\

如果您使用的是 Windows 10,永久處理此(反復出現的)問題的最佳方法是使用 Ubuntu 系統安裝適用於 Linux 的 Windows 子系統 ( WSL ),然后按照此處 ( AWS CLI Ubuntu ) 安裝適用於 Linux 的AWS CLI 完成此操作后,您可以在線使用來自 Linux 系統的約 95% 的 AWS CLI 片段,所有可怕的引用/轉義廢話都消失了! (此外,您還可以獲得在 Windows 系統中安裝 Linux 的巨大好處)

json='{"pets": {"cat": "lucy"},"fur":{"color": "brown"}}'
pets=$(printf "$json" "$pets" "$fur")
aws dynamodb put-item --table-name table-name --item "$pets"

你得到的錯誤是來自 shell 分裂你的變量,你可以用雙引號將它括起來以防止這種情況發生。

user='{"Username": {"S":"alexdebrie"}}'
formattedUser=$(printf "$user" "$Username")
aws dynamodb put-item --table-name UsersTable --item "$formattedUser" --endpoint-url http://localhost:8000

可能對 Mac 和 Linux 用戶有幫助的一件事,請嘗試使用heredoc

考慮以下示例表:

$ aws dynamodb create-table \
--table-name MNLakes \
--key-schema AttributeName=LakeID,KeyType=HASH \
--attribute-definitions AttributeName=LakeID,AttributeType=S \
--provisioned-throughput ReadCapacityUnits=1,WriteCapacityUnits=1

現在我們將為湖 Nokomis添加一些數據。

$ aws dynamodb put-item --table-name MNLakes --item "{\"LakeID\": {\"S\": \"27001900\"}}"

對於簡單的項目,轉義 JSON 中的雙引號是可以的。 然而,對於任何更復雜的事情,它變得相當不愉快。 一個好的解決方案可能是嘗試heredoc

$ aws dynamodb put-item --table-name MNLakes --item "$(cat << EOF
{
  "LakeID":
    {
      "S": "36000800"
    },
  "Sasquatch":
    {
      "S": "YES"
    },
  "LastLakeSurvey":
    {
      "S": "2016"
    } 
}
EOF
)"

結果在這里:

$ alex@DESKTOP-VG47CLN:~$ aws dynamodb scan --table-name MNLakes
{
    "Items": [
        {
            "Sasquatch": {
                "S": "YES"
            },
            "LakeID": {
                "S": "36000800"
            },
            "LastLakeSurvey": {
                "S": "2016"
            }
        },
        {
            "LakeID": {
                "S": "27001900"
            }
        }
    ],
    "Count": 2,
    "ScannedCount": 2,
    "ConsumedCapacity": null
}

雖然舊的cmd.exe /Batch 語法不支持任何優雅的東西,但PowerShell支持

您還可以使用 json 文件:

awslocal dynamodb put-item --table-name your-table-name --item "$(cat dynamo-data/my-mock-data.json)"

我希望這有幫助。

暫無
暫無

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

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