我试图使用查询检索dynamodb表中的所有项目.以下是我的代码:
import boto.dynamodb2 from boto.dynamodb2.table import Table from time import sleep c = boto.dynamodb2.connect_to_region(aws_access_key_id="XXX",aws_secret_access_key="XXX",region_name="us-west-2") tab = Table("rip.irc",connection=c) x = tab.query() for i in x: print i sleep(1)
但是,我收到以下错误:
ValidationException: ValidationException: 400 Bad Request {'message': 'Conditions can be of length 1 or 2 only', '__type': 'com.amazon.coral.validate#ValidationException'}
我所拥有的代码非常简单,并且不受boto dynamodb2文档的影响,所以我不确定为什么会出现上述错误.任何见解都将受到赞赏(新的,有点失去).谢谢
编辑:我有一个哈希键和一个范围键.我能够通过特定的哈希键进行查询.例如,
x = tab.query(hash__eq="2014-01-20 05:06:29")
我怎样才能检索所有物品?
好吧,想通了.如果有人需要:
如果不指定特定的哈希键,则无法在表上使用查询方法.使用的方法是扫描.所以,如果我更换:
x = tab.query()
同
x = tab.scan()
我收到了表格中的所有物品.
我很时髦,但它会给你一个暗示.错误:
{'message': 'Conditions can be of length 1 or 2 only'}
告诉你你的关键条件可以是长度1 - > hashKey,或长度2 - > hashKey + rangeKey.所有在键顶部查询的内容都会引发此错误.出现此错误的原因是:您尝试运行搜索查询但使用键条件查询.您必须添加单独的filterCondition才能执行查询.我的代码
String keyQuery = " hashKey = :hashKey and rangeKey between :start and :end " queryRequest.setKeyConditionExpression(keyQuery)// define key query String filterExpression = " yourParam = :yourParam " queryRequest.setFilterExpression(filterExpression)// define filter expression queryRequest.setExpressionAttributeValues(expressionAttributeValues) queryRequest.setSelect('ALL_ATTRIBUTES') QueryResult queryResult = client.query(queryRequest)