当前位置: 首页 > 知识库问答 >
问题:

无法使用python从AWS Dynamodbget_item?

白子明
2023-03-14

我是dynamodb的新手,尝试从dynamodb获取数据。

这是我的表,以“主题”为主要散列键

我的python代码

import boto3 
from boto3 import dynamodb 

from boto3.session import Session

from boto3.dynamodb.conditions import Key, Attr


dynamodb_session = Session(aws_access_key_id='XXXXXXXXXXXXXXX',
          aws_secret_access_key='XXXXXXXXXXXXXXXXXXXXXXXXXXXX',
          region_name='us-east-1')

dynamodb = dynamodb_session.resource('dynamodb')

table=dynamodb.Table('Garbage_collector_table')

my_topic = "$aws/things/garbage_collector_thing/shadow/update/accepted"

response = table.get_item(TableName='Garbage_collector_table', Key={'topic':my_topic})

for res in response: 
    print "result ",res

我得到以下错误

Traceback (most recent call last):
 File "get-data-dynamodb-boto3.py", line 19, in <module>
    response = table.get_item(TableName='Garbage_collector_table', Key={'topic': my_topic})   File
 "/usr/local/lib/python2.7/dist-packages/boto3/resources/factory.py",
 line 518, in do_action
     response = action(self, *args, **kwargs)   File "/usr/local/lib/python2.7/dist-packages/boto3/resources/action.py",
 line 83, in __call__
     response = getattr(parent.meta.client, operation_name)(**params)   File "/usr/local/lib/python2.7/dist-packages/botocore/client.py", line
 258, in _api_call
     return self._make_api_call(operation_name, kwargs)   File /usr/local/lib/python2.7/dist-packages/botocore/client.py", line 548,
 in _make_api_call
     raise ClientError(parsed_response, operation_name)

botocore.exceptions.ClientError:调用GetItem操作时发生错误(ValidationException):提供的键元素与架构不匹配

我的代码中有什么遗漏吗?

共有3个答案

梁丘璞瑜
2023-03-14

假设表中只有分区键(又名散列键)。

import boto3
dynamodb = boto3.resource('dynamodb',region_name='ap-southeast-2')
table = dynamodb.Table('my-table')
key = {}
key['key'] = 'my-key'
print(key)
response = table.get_item(Key=key)
print(response['Item'])
姚文轩
2023-03-14

您还可以查询数据库:

from boto3.dynamodb.conditions import Key

table = dynamodb.Table(table_name)
response = table.query(
    KeyConditionExpression=Key('topic').eq(my_topic)
)
items = response['Items']
if items:
    return items[0]
else:
    return []

来源:https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/GettingStarted.Python.04.html

乜裕
2023-03-14

您正在混合具有不同方法的资源对象和客户端对象。更多信息请点击这里。

资源的正确语法为:

response = table.get_item(Key={'topic': my_topic})

但我个人建议使用boto客户端:

client = boto3.client('dynamodb')

response = client.get_item(TableName='Garbage_collector_table', Key={'topic':{'S':str(my_topic)}})

http://boto3.readthedocs.io/en/latest/reference/services/dynamodb.html

 类似资料:
  • 我真的很难从一个网站上的下拉菜单中选择一个项目。HTML的代码如下所示: 我已经尝试了我能想到的一切,并在StackOverflow上找到了!我注意到这似乎可以用来选择实际的下拉框: 但我认为这是可行的,因为代码运行时不会出现任何错误。但是,我仍然无法从下拉菜单中选择任何内容。我试过: 通过xpath/name/id/tag/value/text查找元素 选择\u mp。按值选择值('2') 选择

  • 问题内容: 使用Python 2.5.2和Linux Debian,我试图从包含西班牙字符的西班牙URL中获取内容: 我收到此错误: UnicodeEncodeError:’ascii’编解码器无法在位置8编码字符u’\ xe1’:序数不在范围内(128) 我已经尝试过在将URL传递给urllib之前使用: 和这个: 但是他们没有用。 你能告诉我我做错了什么吗? 问题答案: 根据适用的标准RFC

  • 问题内容: 我是编程(和Python)新手。我无法在WinXP 64位笔记本电脑的命令提示符下运行任何python脚本。我分配了路径并通过输入set path确认了。我有Python32。我收到以下消息: 以下是我尝试的脚本: 问题答案: 你应该输入这个 在dos / cmd提示符下,而不是在Python解释器中

  • 问题内容: 由于某些奇怪的原因,我无法从Python测试应用程序中的callproc调用中获得结果。MqSQL 5.2.47中的存储过程如下所示: 现在,在Python 3.3中使用PyCharm时,在调用此存储过程时似乎什么也找不到。这段代码为我提供了预期的结果: 但是这段代码带有cursor.fetchall()或cursor.fetchone()… …返回“ mysql.connector.

  • 问题内容: 我正在尝试运行Python工作。我创建了以下文件夹: C:\ Users \ herod \ jenkins_ws \ workspace \ window_testing 并添加了脚本“ testing.py”。 该脚本非常简单: 但是从Jenkins运行它时出现以下错误(如果我从命令行运行它会起作用): 我究竟做错了什么 ? 这是我尝试过的: 在构建部分的作业配置中,我选择“执行p

  • 我正在尝试将json文件转换为csv文件。json文件来自tweepy。 但是当我打印它的时候,它起作用了。当我只写时,它就起作用了。 我是一个新手在Python和twepy。但是我的直觉告诉我,这个问题与json文件本身有关。 这是json文件本身: 另一个错误: Traceback(最近一次调用):文件"C:\用户\用户\桌面\fase 1-20170930T062552Z-001\trans