这就是我的表格:
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
不被视为有效的属性值?
答案 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
为您构建KeyConditionExpression
和ExpressionAttributeValues
。
免责声明:我写了dynamof