繁体   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