2012-08-29 3 views
2

Je suis en train de récupérer les 10 résultats d'une table dans ma base de données en utilisant la fonction d'analyse comme suit:DynamoDB fonction scan renvoie des résultats corrects, mais avec 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'} 
    ... 

Mais j'obtenir cette erreur au fin (après que les résultats corrects sont retournés):

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'} 

Je ne manipule pas quelque chose qui doit être manipulé?

+0

Qu'est-ce vous version boto? ('' boto .__ version__'') – yadutaf

+0

Je cours 2.5.2. Je reçois cette erreur même lorsque je supprime la variable attributes_to_get – ensnare

+0

Qu'en est-il de '' db.layer1.region.name'' et '' db.layer1.Version''? – yadutaf

Répondre

2

Il y a une erreur sur la ligne de balayage:

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

au lieu de

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

EDIT:

Cela fonctionne avec Boto 2.5.2

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

Lorsque je fais ce changement, j'obtiens une erreur différente et aucun résultat: TypeError: set (['id']) n'est pas sérialisable JSON – ensnare

+0

C'est celui que je reçois avec les accolades ... – yadutaf

+0

Je pense que le problème est quelque part dans la boucle qui affiche les résultats. Quand je prends cette partie, je ne reçois plus d'erreur. – ensnare

Questions connexes