首页 > 解决方案 > DynamoDB 是否有默认/无操作 FilterExpression?

问题描述

我想使用 Boto3 扫描一个小型 DynamoDB 表,并可选择允许此代码的调用者指示何时应将可选条件应用于此扫描。

在代码中这样做会很方便:

scan_kwargs = {'Select': 'ALL_ATTRIBUTES'}
filter_exp = ''  # WHAT DO HERE?
if condition1:
    filter_exp &= Attr('attribute').is_in(['blah', 'bloop'])
if condition2:
    filter_exp &= Attr('deleted').is_eq(True)
scan_kwargs.update({'FilterExpression': filter_exp})
response = table.scan(**scan_kwargs)

我试图弄清楚是否有什么我可以将 FilterExpression 设置为默认值(在上面的评论中指出),以便在没有要应用的过滤器时进行扫描。

据我所知,这是不可能的。

标签: pythonamazon-web-servicesamazon-dynamodbboto3

解决方案


有点斗志昂扬,但我想我可以做到...

filter_exp = Attr('pKey').exists()

...pKey表中的主键或其他必填字段在哪里。

这绝对不是“正确”的解决方案,但可能是我可以有条件地构建的最可靠的无操作过滤器。

如果我对文档的解释是正确的,那么无论任何过滤器表达式如何,扫描操作都会消耗相同数量的读取容量。


推荐阅读