当前位置:  开发笔记 > 编程语言 > 正文

如何在python中查询AWS DynamoDB?

如何解决《如何在python中查询AWSDynamoDB?》经验,为你挑选了2个好方法。

我是NoSQL并且使用AWS DynamoDB的新手.我使用python 2.7从AWS Lambda调用它我试图从'order_number'字段中检索一个值.
这是我的表看起来像(只有一个记录.):
在此输入图像描述

主分区键:subscription_id 在此输入图像描述


和我的二级全局索引:order_number
在此输入图像描述

我的设置是否正确?如果给定order_number如何使用python检索记录?
我无法弄清楚这样做的语法.

我试过了

response = table.get_item( Key = {'order_number': myordernumber} )

但我得到:
调用GetItem操作时发生错误(ValidationException):提供的键元素与架构不匹配:ClientError



1> garnaat..:

DynamoDB不会自动索引对象的所有字段.默认情况下,您可以定义一个哈希键(subscription_id在您的情况下),也可以选择一个范围键,这些键将被索引.所以,你可以这样做:

response = table.get_item(Key={'subscription_id': mysubid})

它将按预期工作.但是,如果要根据需要检索项目,则order_number必须使用scan查看表中所有项目的操作来查找具有正确值的项目.这是一项非常昂贵的操作.或者,您可以在表中创建用order_number作主键的全局二级索引.如果您这样做并调用新索引order_number-index,则可以查询与特定订单号匹配的对象,如下所示:

from boto3.dynamodb.conditions import Key, Attr

response = table.query(
    IndexName='order_number-index',
    KeyConditionExpression=Key('order_number').eq(myordernumber))

DynamoDB是一个非常快速,可扩展且高效的数据库,但它确实需要考虑您可能想要搜索哪些字段以及如何有效地执行此操作.

好消息是,现在您可以将GSI添加到现有表中.以前你必须删除你的表并重新开始.


没关系我弄明白了,我只是导入boto3但需要做`来自boto3.dynamodb.conditions import Key,Attr`

2> user3303554..:

确保您已导入此内容:

from boto3.dynamodb.conditions import Key, Attr

如果你没有它,你肯定会得到错误.它在文档示例中.

感谢@altoids上面的评论,因为这对我来说是正确的答案.我希望通过"正式"答案引起注意.

推荐阅读
k78283381
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有