我无法理解为什么以下查询在DynamoDB表上不起作用:
dict_table.query(KeyConditionExpression='norm = :cihan', ExpressionAttributeValues={':cihan': {'S': 'cihan'}})
并抛出此错误:
ClientError: An error occurred (ValidationException) when calling the Query operation: One or more parameter values were invalid: Condition parameter type does not match schema type
以下作品:
dict_table.query(KeyConditionExpression=Key('norm').eq('cihan'))
norm
是一个字符串类型的字段。我正在使用boto3 v 1.4.0和following the docs:
In [43]: boto3.__version__
Out[43]: '1.4.0'
有人能看到第一个查询中的错误是什么吗?
奖金问题:所有令牌是什么以及需要一直更换它们?为什么我不能只说dict_table.query(KeyConditionExpression='norm = cihan')
答案 0 :(得分:3)
请更改ExpressionAttributeValues,如下所述。
ExpressionAttributeValues={':cihan': 'cihan'}
答案 1 :(得分:1)
在当前版本的boto3(1.9.128)中,询问的问题中提到的查询工作正常,并且除此之外没有其他工作,下面提到的查询对我有效:-
dynamo_client.query(
KeyConditionExpression='campaign_id = :201906',
ExpressionAttributeValues={':201906': {'S': '201906'}}
)
答案 2 :(得分:0)
要回答您的奖励问题,所有令牌都是dynamo用来确保通信时与HTTP请求之间的类型一致性的抽象层。使用标准的http / json在“ 2”和“ 2”的情况下存在歧义的余地。因此,dynamo强制客户端将值包装在专门定义其类型的对象中。
话虽如此... boto3 API并没有为您抽象化。尽管我对boto3工具的范围了解甚少。在名为dynamof的图书馆中,充满希望。使用它,您的查询将类似于:
from boto3 import client
from dynamof import db as make_db
from dynamof import query
client = client('dynamodb', endpoint_url='http://localstack:4569')
db = make_db(client)
results = db(query(
table_name='dict_table',
conditions=attr('norm').equals('cihan')
))
您将获得相同的简单API,用于在其他常用操作(例如创建表,添加项目,更新,删除和扫描)中发出发电机请求。现在,更多的操作和功能正在开发中。
免责声明:我写了dynamof