DynamoDB扫描函数返回正确的结果,但与DynamoDBResponseError

问题描述:

我试图使用扫描功能如下,以从表中检索任何10个结果在我的数据库:DynamoDB扫描函数返回正确的结果,但与DynamoDBResponseError

conn = boto.connect_dynamodb(
     aws_access_key_id=config.AWS_KEY, 
     aws_secret_access_key=config.AWS_SECRET) 

    table = conn.get_table('tablename') 
    results = table.scan(attributes_to_get={'id'}, 
      max_results=10) 

    for item in results: 
    print item 

    ./dbtest.py 
    {'id': 'SkAJWDUZPSNrwepf7gdnFhExXPFABmqLjk1ADDRJuoo'} 
    {'id': 'RjAVvd4SAmjtUbXEYmzBaIIDuruL5UZWEQPdcpj4XRc'} 
    ... 

但后来我在得到这个错误结束后(返回正确的结果后):

Traceback (most recent call last): 
    File "./mediatest.py", line 23, in <module> 
    for item in results: 
    File "/usr/lib/python2.7/dist-packages/boto/dynamodb/layer2.py", line 767, in scan 
    object_hook=item_object_hook) 
    File "/usr/lib/python2.7/dist-packages/boto/dynamodb/layer1.py", line 521, in scan 
    return self.make_request('Scan', json_input, object_hook=object_hook) 
    File "/usr/lib/python2.7/dist-packages/boto/dynamodb/layer1.py", line 121, in make_request 
    retry_handler=self._retry_handler) 
    File "/usr/lib/python2.7/dist-packages/boto/connection.py", line 746, in _mexe 
    status = retry_handler(response, i, next_sleep) 
    File "/usr/lib/python2.7/dist-packages/boto/dynamodb/layer1.py", line 148, in _retry_handler 
    json_response) 
boto.exception.DynamoDBResponseError: DynamoDBResponseError: 400 Bad Request 
{'Message': 'Expected null', '__type': 'com.amazon.coral.service#SerializationException'} 

我不处理需要处理的东西吗?

+0

是什么你博托版本? (''boto .__ version__'') – yadutaf

+0

我正在运行2.5.2。即使我删除了attributes_to_get变量,我也会得到这个错误 – ensnare

+0

db.layer1.region.name和db.layer1.Version是怎么回事? – yadutaf

上有扫描线的错误:

results = table.scan(attributes_to_get={'id'}, 
     max_results=10) 

,而不是

results = table.scan(attributes_to_get=['id'], 
     max_results=10) 

编辑:

这适用于2.5.2的Boto

import boto 

db = boto.connect_dynamodb() 

table = db.get_table('MyTable') 
res = table.scan(attributes_to_get=['id'], max_results=10) 

for i in res: 
    print i 
+0

当我做出这种变化,我得到了一个不同的错误,没有结果:TypeError:set(['id'])不是JSON可序列化 – ensnare

+0

这是我用花括号得到的那个... – yadutaf

+0

我认为问题是显示结果的循环中的某处。当我拿出那部分时,我不会再犯错误了。 – ensnare