[英]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.