python - 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 设置为默认值(在上面的评论中指出),以便在没有要应用的过滤器时进行扫描。
据我所知,这是不可能的。
解决方案
有点斗志昂扬,但我想我可以做到...
filter_exp = Attr('pKey').exists()
...pKey
表中的主键或其他必填字段在哪里。
这绝对不是“正确”的解决方案,但可能是我可以有条件地构建的最可靠的无操作过滤器。
如果我对文档的解释是正确的,那么无论任何过滤器表达式如何,扫描操作都会消耗相同数量的读取容量。
推荐阅读
- java - 在 Spring 项目中对 Get 请求进行单元测试
- java - 使用递归检查树路径中是否存在总和
- node.js - 使用 cron 作业启动节点 js 服务器
- python - 正则表达式如何匹配贪婪捕获前面的可选字符?
- java - 一旦调用 countDownTimer.cancel(),应用程序就会崩溃
- javascript - 如何在反应或javascript中将对象数组与另一个数组映射?
- python - 使用条件连接语句加入 Pandas Dataframe
- java - FileWriter 不会将整数写入文件
- r - 混合正态分布的重要性抽样
- html - 避免与 Bootstrap Navbar 相关的固定高度问题。(超级菜单)