我有一个主键和范围键设置的表:
user_id
timestamp_joined
使用boto api图层,有没有办法只通过指定user_id(没有范围键)来检索项目?每次执行getItem()查询而不指定范围键时,它都会失败。我只能通过指定范围键(timestamp_joined)来使其工作。
仅通过user_id提取时的错误消息如下:
boto.exception.DynamoDBResponseError: DynamoDBResponseError: 400 Bad Request
{'message': 'One or more parameter values were invalid: The provided
key size does ot match with that of the schema', '__type':
'com.amazon.coral.validate#ValidationException'}
答案 0 :(得分:3)
听起来你想要执行查询。您可以查询仅指定user_id(散列键)的表,并且查询将返回与该user_id匹配的所有项目,而不管范围值如何。
答案 1 :(得分:0)
result = table.scan(Attr('user_id').eq(/number here/),
Limit=1,
ConsistentRead=True)
如果每个user_id有超过1个项目,则可以将结果限制为每个扫描或查询最多1M个结果。
答案 2 :(得分:0)
这在日期范围内对我有用
我做了一个这样的查询:
import requests, json
import boto3
from boto3.dynamodb.conditions import Key, Attr
def lambda_handler(event, context):
dynamodb = boto3.resource('dynamodb', region_name='us-east-1', aws_access_key_id='your_access',aws_secret_access_key='your_secret')
table = dynamodb.Table('Table_name')
date_i = '2013-11-18'
date_f = '2013-11-19'
try:
fe = Key('Date').between(date_i,date_f);
response = table.scan(
FilterExpression=fe
)
print(response['Items'])
except Exception as e:
print(e)
raise e
我在该范围内有 2 个结果。