3

我在使用 DynamoDB2 API 使用 boto 2.9.5 执行任何单个或批量查询时遇到问题

我需要像这样进行批量查询:

one_org = Table('[table-name]').batch_get(keys=[
        {'key': '[user-id-hash]'},
        {'key': '[user-id-hash]'},
        {'key': '[user-id-hash]'},
        {'key': '[user-id-hash]'},
    ])

for user in one_org:
    for key, value in user.items():
        print key, value

我不断收到此异常:

boto.dynamodb2.exceptions.ValidationException: ValidationException: 400 Bad Request
{
    u'message': u'The provided key element does not match the schema', 
    u'__type': u'com.amazon.coral.validate#ValidationException'
}

鉴于此消息,我认为密钥的名称存在问题,但我们的密钥称为密钥,因此对我来说没有任何意义。

我在下面包含了堆栈跟踪:

Traceback (most recent call last):
  File "aws/interfaces.py", line 38, in <module>
    for user in one_org:
  File "/home/kasper/Falcon/thenest/venv/local/lib/python2.7/site-packages/boto/dynamodb2/results.py", line 59, in next
    self.fetch_more()
  File "/home/kasper/Falcon/thenest/venv/local/lib/python2.7/site-packages/boto/dynamodb2/results.py", line 141, in fetch_more
    results = self.the_callable(*args, **kwargs)
  File "/home/kasper/Falcon/thenest/venv/local/lib/python2.7/site-packages/boto/dynamodb2/table.py", line 949, in _batch_get
    raw_results = self.connection.batch_get_item(request_items=items)
  File "/home/kasper/Falcon/thenest/venv/local/lib/python2.7/site-packages/boto/dynamodb2/layer1.py", line 152, in batch_get_item
    body=json.dumps(params))
  File "/home/kasper/Falcon/thenest/venv/local/lib/python2.7/site-packages/boto/dynamodb2/layer1.py", line 1479, in make_request
    retry_handler=self._retry_handler)
  File "/home/kasper/Falcon/thenest/venv/local/lib/python2.7/site-packages/boto/connection.py", line 852, in _mexe
    status = retry_handler(response, i, next_sleep)
  File "/home/kasper/Falcon/thenest/venv/local/lib/python2.7/site-packages/boto/dynamodb2/layer1.py", line 1518, in _retry_handler
    response.status, response.reason, data)
boto.dynamodb2.exceptions.ValidationException: ValidationException: 400 Bad Request
{u'message': u'The provided key element does not match the schema', u'__type': u'com.amazon.coral.validate#ValidationException'}
4

2 回答 2

11

我今天早上面临同样的问题。如果您在架构中定义了 RangeKey,那么您还需要指定它。如果您不想指定 RangeKey 并且只使用 HashKey 获取项目,请考虑删除 RangeKey。

于 2013-05-30T11:29:47.223 回答
3

错误是说提供的值与架构中定义的类型不匹配。我不知道您的架构是什么,但例如,如果架构将主键(key在您的情况下称为)定义为字符串,并且您提供了一个整数值,反之亦然,您会收到此错误。

检查您的架构并确保您为查询传递了正确类型的值。

于 2013-05-30T11:20:02.133 回答