python - 使用过滤器表达式从 dynamo db 查询返回固定数量的项目

标签 python amazon-web-services amazon-dynamodb boto3 dynamodb-queries

我正在尝试从 dynamo 数据库表中检索固定数量(暂时将其设为 5)的项目。

这是我正在使用的代码。

response = table.query(
                       KeyConditionExpression=Key('pk').eq('goo'),
                       Limit=5,
                       FilterExpression=Attr('goo').eq('bar'))

我只能从中得到 4 件元素。但是如果我删除 FilterExpression,项目计数将为 5。那么即使我使用 FilterExpression,还有其他方法可以获取固定数量的项目吗?

最佳答案

从表中读取项目后应用过滤表达式,以减少通过线路发送的记录数量。 Limit 在查询操作期间应用,即在过滤表达式之前。

如果 Query 读取了 5 个项目,而其中只有 4 个与 FilterExpression 匹配,您将仅返回 4 个项目。

务实的做法是从查询中删除限制并在客户端应用限制。缺点是您可能需要支付更多读取容量单位的费用。

如果您想避免这种情况,您可能必须重新考虑您的数据模型 - 通用解决方案在这里很困难。


在您的特定情况下,您可以使用分区键pk和排序键goo创建全局二级索引(它不对于 GSI 来说必须是唯一的)。然后,您可以针对限制为 5 的 GSI 发起查询,它将给出您想要的结果。 但是:您需要为 GSI 存储 + 吞吐量付费。


编辑:This question is pretty much a duplicate except for the Python code

关于python - 使用过滤器表达式从 dynamo db 查询返回固定数量的项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/75015994/

相关文章:

python - SQLAlchemy 中所有行的高效更新

java - 当对象没有公共(public)访问权限时,无法将对象放入 S3 存储桶中

python - 如何通过忽略boto3中的空元素将JSON数据写入Dynamodb

amazon-web-services - Cloudformation 等待同一堆栈中的另一个资源创建

javascript - 使用 x-amz-tagging 请求 header 指定标签

excel - 是否可以从 Excel 文件导入 AWS DynamoDB 中的数据?

amazon-web-services - 将无服务器应用程序部署到Docker

python - Curses 菜单模块有自己的方法

python - 我如何解析uri?

python - 格式化小数位时遇到问题