boto3 dynamodb查询

时间:2017-06-02 08:09:13

标签: amazon-dynamodb boto3

这就是我的表格:

  

enter image description here

toHash是我的主分区键,timestamp是排序键。

所以,当我执行这段代码时[为获取timestamp的反向排序列表]:

导入boto3 来自boto3.dynamodb.conditions import Key,Attr

client = boto3.client('dynamodb')
response = client.query(
    TableName='logs',
    Limit=1,
    ScanIndexForward=False,
    KeyConditionExpression="toHash = :X",
)

我收到以下错误:

botocore.exceptions.ClientError: An error occurred (ValidationException) when calling the Query operation: Invalid KeyConditionExpression: An expression attribute value used in expression is not defined; attribute value: :X

我在这里做错了吗? 为什么X不被视为有效的属性值?

2 个答案:

答案 0 :(得分:1)

如下所述添加ExpressionAttributeValues: -

response = client.query(
    TableName='logs',
    Limit=1,
    ScanIndexForward=False,
    KeyConditionExpression="toHash = :X",
    ExpressionAttributeValues={":X" : {"S" : "somevalue"}}
)

答案 1 :(得分:1)

这就是为什么我不再直接使用boto的原因。像这样的简单东西的API实在是太疯狂了。 @notionquest是正确的,您需要添加ExpressionAttributeValues。我不再烦这些东西了。我使用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)

db(query(
    table_name='logs',
    conditions=attr('toHash').equals('somevalue')
))

dynamof为您构建KeyConditionExpressionExpressionAttributeValues

免责声明:我写了dynamof