我想使用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设置为默认值(在上面的注释中指出),以便在没有应用过滤器的情况下进行扫描。
据我所知,这是不可能的。
答案 0 :(得分:0)
有点草率,但我想我可以...
filter_exp = Attr('pKey').exists()
...,其中pKey
是表中的主键或另一个必填字段。
这绝对不是“正确”的解决方案,但可能是我可以有条件建立的最可靠的无操作滤波器。
如果我对the documentation的解释正确,则无论任何过滤器表达式如何,扫描操作都会消耗相同数量的读取容量。