如何仅使用 boto 2.25.0 通过全局二级索引查询 DynamoDB2 表?

2024-02-05

这是我从常规 DynamoDB 表切换到具有全局二级索引的 DynamoDB2 表的延续**。

所以我创建了如图所示的表格here https://stackoverflow.com/questions/21736813/getting-attributeerror-when-trying-to-create-dynamodb-table-with-global-index-us然后添加以下两个元素:

table.put_item(data={'firstKey': 'key01', 'message': '{"firstKey":"key01", "comments": "mess 1 w/o secondKey"}'})
table.put_item(data={'firstKey': 'key02', 'secondKey':'skey01', 'message': '{"firstKey":"key02", "parentId":"skey01", "comments": "mess 2 w/ secondKey"}'})

我现在想做的是通过(i)唯一的来检索项目firstKey价值观或 (ii) 独特secondKey价值观。第一个很简单:

res1 = table.get_item(firstKey='key01')
res1['message']

我不知道如何做第二个。这不起作用:

res2 = table.get_item(secondKey='skey01')

生产The provided key element does not match the schema。好的,这是预期的。当我这样做时:

res2 = table.query(secondKey='skey01',index='secondKeyIndex')

I get You must specify more than one key to filter on.

那么我该如何让它发挥作用呢?请注意,当我的值为secondKey一个项目,我不知道它对应的firstKey.

===== 更新:这是我尝试过的其他一些事情:

This

res2 = table.query(secondKey__eq='skey01',index='secondKeyIndex')

produced

boto.dynamodb2.exceptions.QueryError: You must specify more than one key to filter on.

在下面的块中,query语句没有产生任何错误

res2 = table.query(secondKey='skey01',secondKey__eq='skey01',index='secondKeyIndex')
for r in res2:
    print res2['secondKey']

but the print gave me

boto.dynamodb2.exceptions.UnknownFilterTypeError: Operator 'secondKey' from 'secondKey' is not recognized.

可以使用LSI/GSI。

请参阅此处的 boto 教程(搜索 LSI,您将获得示例)。 DynamoDB2 — boto v2.25.0 :http://boto.readthedocs.org/en/latest/ref/dynamodb2.html http://boto.readthedocs.org/en/latest/ref/dynamodb2.html

添加完整的工作示例(尝试使用 dynamo local:http://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Tools.DynamoDBLocal.html http://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Tools.DynamoDBLocal.html)

conn = DynamoDBConnection(
    host='localhost',
    port=8000,
    aws_access_key_id='DEVDB', #anything will do
    aws_secret_access_key='DEVDB', #anything will do
    is_secure=False)
tables = conn.list_tables()
print "Before Creation:", tables

table_name = 'myTable'
if table_name not in tables['TableNames']:
    Table.create(table_name
        , schema=[HashKey('firstKey')]
        , throughput={'read': 5, 'write': 2}
        , global_indexes=[
            GlobalAllIndex('secondKeyIndex', parts=[HashKey('secondKey')], throughput={'read': 5, 'write': 3})]
        , connection=conn
    )
    #print_table_details(conn, table_name)
table = Table(table_name, connection=conn)
item = Item(table, data={
    'firstKey': str(uuid.uuid4()),
    'secondKey': 'DUMMY-second'
})
item.save()
results = table.query(secondKey__eq='DUMMY-second', index='secondKeyIndex')
for res in results:
    print res['firstKey'], res['secondKey']

执行结果为:

91d4d056-1da3-42c6-801e-5b8e9c42a93f DUMMY-second
15c17b09-4975-419a-b603-427e4c765f03 DUMMY-second
dd947b7d-935e-458f-84d3-ed6cd4f32f5a DUMMY-second

还添加确切的包(由于 Dynamo1/2 - 有可能出错):

from boto.dynamodb2.fields import HashKey, RangeKey, GlobalAllIndex
from boto.dynamodb2.layer1 import DynamoDBConnection
from boto.dynamodb2.table import Table
from boto.dynamodb2.items import Item
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何仅使用 boto 2.25.0 通过全局二级索引查询 DynamoDB2 表? 的相关文章

随机推荐

  • 如何迭代通用函数中传递的切片并集? (T无芯型)

    我正在 go 1 18 中测试泛型并查看了这个example https go dev doc tutorial generics declare type constraint 我想重新创建该示例 但能够传入 int 切片或 float
  • 未为目标“###”提供服务证书 在 ClientCredentials 中指定服务证书

    我已经实现了一个测试客户端 服务器 它实现了UserName通过 WCF 进行消息身份验证 它almost一切顺利 但我在最后一个障碍处摔倒了 我得到一个InvalidOperationException上面写着 未为目标 http loc
  • 使用数组和List<>哪个更好? [复制]

    这个问题在这里已经有答案了 我想知道哪种类型的性能更好以及您认为应该使用哪种类型 例如 我有一个字符串列表 不知道我需要多少个项目 因此使用 Add String 函数非常方便 我可以随时轻松地将新字符串添加到列表中 使用每种方法的优点 缺
  • WiX 安装程序 msi 未安装使用 Visual Studio 2017 创建的 Winform 应用程序

    为了进行简单的测试 我创建了一个Wix简单 Winform 应用程序的安装程序应用程序如下 但是当我运行msi使用安装程序创建 它运行仅一秒钟 然后退出而不安装 Winform 应用程序 Question 这可能是什么问题 我的身上似乎缺少
  • 未指定的隐式对象创建

    Since P0593 为低级对象操作隐式创建对象 https github com cplusplus papers issues 106已被接受 现在可以创建对象隐含地在 C 20 中 具体来说 该提案引入的措辞允许某些操作 例如std
  • SchemaSpy PostgreSQL - 警告 - 连接失败

    我尝试使用 SchemaSpy 连接到我的 PostgresSQL 服务器 我安装了 Java 使用oracle java8 installer from ppa webupd8team java 我的 PostgreSQL 服务器在 Do
  • 捕获 WebService 抛出的 SoapException

    我写了以下服务 namespace WebService1 WebService Namespace http tempuri org WebServiceBinding ConformsTo WsiProfiles BasicProfil
  • Umbraco - 通过 URL 选择节点

    当我尝试通过 URL 访问节点时 我遇到了 Umbraco 问题 我一直在尝试形成一个 xpath 查询来选择 url 但我不知道该怎么做 而且他们的 API 中的所有内容都是 动态的 所以我发现不可能更深入地挖掘其他内容方法 Umbrac
  • 将大视频从 iPhone 上传到网络服务器

    我正在尝试将一个大视频从 iphone 上传到具有 php 脚本的网络服务器 我在用着NSInputStream获取文件视频块 我在每次遍历时创建一个请求 POST void stream NSStream stream handleEve
  • Git Pull 与 Git Rebase

    我是 Git 新手 正在尝试了解两者之间的区别git pull vs git rebase 有人可以提供一个例子 何时使用哪个选项 因为我觉得两者都有相同的目的 git pull and git rebase不可互换 但它们是紧密相连的 g
  • 以编程方式将优惠券应用于 WooCommerce3 中的订单

    我正在开发一个插件 可以直接创建订单 无购物车 并应用优惠券 在 woo API 3 0 版本中 该函数add coupon 已被弃用 取而代之的是WC Order Item Coupon您添加到订单中的对象 创建优惠券 coupon ne
  • Grafana“Node Exporter Full”仪表板在导入后不显示任何数据

    我正在尝试从这里导入节点导出器完整仪表板 https grafana com grafana dashboards 1860 https grafana com grafana dashboards 1860 但是当我导入仪表板时 它什么也
  • 如何以编程方式获取 mac os x macbook 的电池寿命?

    我想做的是记录电池百分比 我知道linux中的等效项是sysctl hw acpi battery life 然而 当我在 mac os x 中查看 sysctl 的 man 时 我没有找到等效的代码来找到它 有人可以指出如何使用 Obje
  • 从 Python 中的类调用函数时参数数量错误

    我正在尝试用 python 编写遗传算法的实现 它说 当只允许一个参数时 我会用两个参数来调用它 但我确信我不允许 这是相关代码 class GA def init self best pops 100 mchance 07 ps 1 im
  • Xamarin 加载项无法正常工作,无法查看加载项列表

    我刚刚开始在 Mac 上的 Xamarin Studio 中使用 CocosSharp 我正在尝试遵循此演练 https developer xamarin com guides cross platform game developmen
  • 通过 ldapmodify 修改 Active Directory 密码

    我正在研究各种 LDAP 操作的脚本编写 然而 我在 Active Directory 用户创建方面遇到了一些障碍 当我通过以下 LDIF 加载时 它失败ldapmodify命令 dn CN Frank CN Users DC domain
  • 更新到 Ubuntu 22.04 后 rbenv 安装失败 (Jammy Jellyfish)

    升级到 Ubuntu 22 04 Jammy Jellyfish 后 我注意到 Ruby 2 7 2 存在问题 因此我尝试安装 2 7 2 当安装失败时 又安装了 2 7 6 它也失败并出现相同的错误 rbenv install 2 7 6
  • Yeoman 和车把模板

    有人使用 yeoman 和 ember 吗 如果是这样 我如何让 yeoman 编译车把模板 如果可能的话我想使用 rake 管道 有没有人想出一个解决方案来编译 yeoman 的车把模板 Dan Gebhardt 一直致力于与 yeoma
  • 在 WooCommerce 中使用复选框以允许多种选择

    我已经使用 WooCommerce 一段时间了 但这个问题给我带来了问题 我正在为其创建网站的客户提供培训课程和演示文稿 并且该特定产品 或演示文稿 允许将多个不同的选项添加到购物车 每个选项都有自己的价格 因此 基本价格为零 然后 用户可
  • 如何仅使用 boto 2.25.0 通过全局二级索引查询 DynamoDB2 表?

    这是我从常规 DynamoDB 表切换到具有全局二级索引的 DynamoDB2 表的延续 所以我创建了如图所示的表格here https stackoverflow com questions 21736813 getting attrib