DynamoDB boto3:如何查询键是否具有某些值

时间:2019-05-21 12:37:09

标签: amazon-dynamodb boto3 dynamodb-queries

我正在编写python代码以查询dynamo DB上的表。除了其他条件外,我还想获取行,该行中存在我指定的键的某些值。

KeyConditionExpression = Key('Status').eq('Done') & Key('Name').begins_with('A') & Key('Error').exists()

在上面的代码中,我想显示“错误”列具有某些值的行,无论它是什么。 但最后一个条件是抛出错误。 AttributeError:“键”对象没有属性“存在”。

如何修改代码以合并第三个查询?

1 个答案:

答案 0 :(得分:2)

假定“错误”键既不是分区键也不是排序键,因为您必须始终将分区键名称和值指定为相等条件。另外,对于排序键,您可以使用下面提到的比较运算符之一。

  • a = b。-如果属性a等于值b
  • ,则为true
  • a -如果a小于b
  • ,则为true
  • a <= b -如果a小于或等于b
  • ,则为true
  • a> b -如果a大于b
  • ,则为true
  • a> = b -如果a大于或等于b
  • a BETWEEN b AND c-如果a大于或等于b且小于或等于c,则为true。
  • begins_with(a,substr)-如果属性a的值以特定的子字符串开头,则为true。

现在回到您的问题,如果您使用的是 Query 操作,那么您可以肯定地使用 QueryFilter 来检查某些非空值密钥“错误”的值存在。官方文档将QueryFilter定义为:

  

在Query操作中,QueryFilter是一种条件,可在读取项目后评估查询结果并仅返回所需值。

以下比较运算符可用于 QueryFilter

EQ | NE | LE | LT | GE | GT | NOT_NULL | NULL |内容| NOT_CONTAINS | BEGINS_WITH | IN |在

之间

请参考下面的链接以获取有关QueryFilter和FilterExpression的更多信息

AWS官方文档链接:https://docs.amazonaws.cn/en_us/amazondynamodb/latest/developerguide/LegacyConditionalParameters.QueryFilter.html