我正在使用AWS CLI进行dynamoDB查询,其中包括key-condition-expression
和expression-attribute-names
,并且我不断获得无效错误:
Invalid type for parameter ExpressionAttributeNames.:taskName, value: OrderedDict([(u'S', u'taskOne')]), type: <class 'collections.OrderedDict'>, valid types: <type 'basestring'>
Invalid type for parameter ExpressionAttributeNames.#status, value: OrderedDict([(u'S', u'status')]), type: <class 'collections.OrderedDict'>, valid types: <type 'basestring'>
Invalid type for parameter ExpressionAttributeNames.:status, value: OrderedDict([(u'S', u'success')]), type: <class 'collections.OrderedDict'>, valid types: <type 'basestring'>
我看了以前的问题,如dynamodb-get-item-boto3-parameter- validate -failed和invalid-type-parameter-class-str-valid-types-class-dict,但我没有看到我做错了什么。
Dynamo调用需要属性数据类型,我已经包含了,但我认为这是导致错误的原因。删除数据类型会导致另一个预期错误。
这是我的电话:
aws dynamodb query
--table-name myTable
--key-condition-expression "taskName = :taskName AND #status = :status"
--expression-attribute-names '{":taskName":{"S":"taskOne"},"#status":{"S":"status"},":status":{"S":"success"}}'
更新:当我删除数据类型:"S"
时,我得到这个错误:
解析参数"——expression-attribute-names"错误:Invalid JSON:无法解码JSON对象
您在属性名称下混合了属性名称和值。两者都需要https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Expressions.ExpressionAttributeValues.html名称是纯字符串,值是用"S
"定义的对象。作为类型。但都是单独定义
试试这个
aws dynamodb query
--table-name myTable
--key-condition-expression "#taskName = :taskName AND #status = :status"
--expression-attribute-names '{"#taskName": "taskName","#status": "status"}'
--expression-attribute-values '{":taskName":{"S":"taskOne"},":status":{"S":"success"}}'