Tôi đang gặp sự cố khi sử dụng AWS Boto3 để truy vấn DynamoDB bằng khóa băm và khóa phạm vi cùng một lúc bằng cách sử dụng khóa đề nghị KeyConditionExpression. Tôi có kèm theo một truy vấn Ví dụ:Truy vấn DynamoDB bằng khóa băm và phím phạm vi với Boto3
import boto3
from boto3 import dynamodb
from boto3.session import Session
dynamodb_session = Session(aws_access_key_id=AWS_KEY,
aws_secret_access_key=AWS_PASS,
region_name=DYNAMODB_REGION)
dynamodb = dynamodb_session.resource('dynamodb')
table=dynamodb.Table(TABLE_NAME)
request = {
'ExpressionAttributeNames': {
'#n0': 'hash_key',
'#n1': 'range_key'
},
'ExpressionAttributeValues': {
':v0': {'S': MY_HASH_KEY},
':v1': {'N': GT_RANGE_KEY}
},
'KeyConditionExpression': '(#n0 = :v0) AND (#n1 > :v1)',
'TableName': TABLE_NAME
}
response = table.query(**request)
Khi tôi chạy này chống lại một bảng với các sơ đồ sau:
Table Name: TABLE_NAME
Primary Hash Key: hash_key (String)
Primary Range Key: range_key (Number)
tôi nhận được lỗi sau và tôi không thể hiểu tại sao:
ClientError: An error occurred (ValidationException) when calling the Query operation: Invalid KeyConditionExpression: Incorrect operand type for operator or function; operator or function: >, operand type: M
Từ hiểu biết của tôi, loại M sẽ là một loại bản đồ hoặc từ điển và tôi đang sử dụng loại N là loại số và khớp với lược đồ bảng của tôi cho khóa phạm vi. Nếu ai đó có thể giải thích tại sao lỗi này xảy ra hoặc tôi cũng mở cho một cách khác để hoàn thành cùng một truy vấn ngay cả khi bạn không thể giải thích tại sao lỗi này tồn tại.
Bạn có tìm ra điều gì sai với mã của mình không? Tôi đang chạy vào một vấn đề tương tự. – tayfun