我在DynamoDB中创建了一个同时具有主键(字符串)和排序键(数字)(course-lesson-id)的表,并且我正在使用以下简单的Lambda函数来查询该表,其中课程ID> 0:
import json
import boto3
from boto3.dynamodb.conditions import Key, Attr
#always start with the lambda_handler
def lambda_handler(event, context):
# make the connection to dynamodb
dynamodb = boto3.resource('dynamodb')
# select the table
table = dynamodb.Table("table-name")
response = table.query(
KeyConditionExpression=Key('course-lesson-id').gt(0)
)
items = response['Items']
print(items)
据我所知,应该根据排序键以数字顺序返回结果,但是出现以下错误:
ClientError: An error occurred (ValidationException) when calling the
Query operation: Query condition missed key schema element: course-
lesson
course-lesson是主分区键的名称。
对可能的原因或解决方案有任何想法吗?
答案 0 :(得分:2)
您需要为Query
操作提供主键。在Query docs中:
使用
来缩小查询操作的范围KeyConditionExpression
参数为分区键提供特定的值。 [...]您可以可选,通过指定排序键值[...]
不能仅通过提供排序键来使用Query
。如果您只想基于course-lesson-id
进行查询以查询大于0
的情况,则可以使用Scan
-但是,请注意Scan
在资源使用条件,例如,对于大表,它们需要更长的时间来执行。