簡體   English   中英

在不使用 boto3 的情況下改變 DynamoDB 中的表

[英]Mutate table in DynamoDB without using boto3

我正在嘗試創建一個 Python 項目,該項目能夠在我的 AWS Dynamo 數據庫中查詢和更新表。

我的查詢如下:

query = """query {
    listTodos {
    nextToken
    startedAt
    items {
      createdAt
      name
      description
    }
  }
}"""


Headers = {'X-API-KEY': 'myKey'}
url = 'https://example.amazonaws.com/graphql'
r = requests.post(url, json={'query': query}, headers=Headers)
print(r.status_code)
print(r.text)

我收到了預期的 200 響應,其中給出了名稱、createdAt(時間)和描述。

我想要做的是傳遞一個突變,但是當不使用 boto3 時沒有這方面的文檔。 為簡單起見,我很想知道在僅使用 requests.post 時如何更改此表

我嘗試了以下但沒有成功:

query = """
    mutation {
        updateTodo (id: 80e1a712-0053-436c-ba73-9182a7cca67f, name: "Paul") {
            name
        }
    }
"""

從這里我收到 MalformedHttpRequestException

實現這一目標的最佳方法是什么? 提前感謝您,因為我是 AWS 平台的新手。

在一篇文中,我曾經將 DynamoDB 請求協議與另一個協議 CQL 進行了比較。 我的觀察之一是 DynamoDB 協議最“明顯”的優勢之一是它使用標准的 HTTP 和 JSON 來處理請求,所以乍一看,用任何語言編寫 DynamoDB 客戶端似乎都是微不足道的有一個 HTTP 請求庫 - 不需要像 boto3 這樣復雜的 AWS 特定庫。

那么,為什么人們最終還是使用 boto3(用於 Python)呢? 嗯,主要原因是需要簽署請求。 您沒有說明為什么您的嘗試不成功(您遇到了什么錯誤?)但是如果我暫時忽略您的請求看起來不像有效的 DynamoDB 請求這一事實,那么您遇到的下一個問題是 Amazon抱怨您的請求未簽名。 您需要使用您的 AWS id 和密鑰對每個請求進行數字簽名,以證明您的身份並允許 Amazon 向您收取請求費用。 在沒有庫的情況下這樣做是非常有可能的(我已經做到了),但並非微不足道。 只使用一個庫要容易得多,比如 boto3。 你為什么要避免它?

如果您真的很想避免使用 boto3(或其他替代庫)並自己實現該協議,請查看亞馬遜關於低級 API 的文檔,了解有關 DynamoDB 請求格式和簽名實現的更多詳細信息。

暫無
暫無

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

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