使用 KeyConditionExpression 的 boto3 查询

tay*_*fun 7 python amazon-web-services amazon-dynamodb boto3

我无法理解为什么下面对 DynamoDB 表的查询不起作用:

dict_table.query(KeyConditionExpression='norm = :cihan', ExpressionAttributeValues={':cihan': {'S': 'cihan'}})
Run Code Online (Sandbox Code Playgroud)

并抛出此错误:

ClientError: An error occurred (ValidationException) when calling the Query operation: One or more parameter values were invalid: Condition parameter type does not match schema type

而以下工作:

dict_table.query(KeyConditionExpression=Key('norm').eq('cihan'))
Run Code Online (Sandbox Code Playgroud)

norm是一个字符串类型的字段。我正在使用 boto3 v 1.4.0 并遵循文档:

In [43]: boto3.__version__
Out[43]: '1.4.0'
Run Code Online (Sandbox Code Playgroud)

谁能看到第一个查询中的错误是什么?

额外的问题:所有的代币是什么以及需要一直替换它们?为什么我不能说dict_table.query(KeyConditionExpression='norm = cihan')

not*_*est 7

请按如下所述更改 ExpressionAttributeValues。

ExpressionAttributeValues={':cihan': 'cihan'}
Run Code Online (Sandbox Code Playgroud)

  • 谢谢,成功了!但为什么Boto3文档给出了下面的例子呢?`{ ":avail":{"S":"可用"}, ":back":{"S":"缺货"}, ":disc":{"S":"已停止"} }` 请参阅 http ://boto3.readthedocs.io/en/latest/reference/services/dynamodb.html#DynamoDB.Client.query (2认同)
  • 我同意,这些文档具有误导性。它们看起来像是您为 ExpressionAttributeValues 提供的字典的值,它们本身应该是带有“S”、“B”和“N”等键的字典,而我认为它只是试图表明这些是可能的类型的价值观。 (2认同)