2015-10-22 21 views
5

推奨KeyConditionExpressionを使用して、AWS Boto3を使用してDynamoDBにハッシュキーと範囲キーを同時に照会するのに問題があります。私は、クエリの例を添付していますBoto3でハッシュキーと範囲キーを使用してDynamoDBを照会

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) 

私は次のスキームを持つテーブルに対してこれを実行すると:

Table Name: TABLE_NAME 
Primary Hash Key: hash_key (String) 
Primary Range Key: range_key (Number) 

私は次のエラーを取得すると、私は理由を理解することはできません。

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 

私の理解から、タイプMはマップまたは辞書タイプであり、タイプNでタイプNでレンジ・キーのテーブル・スキームと一致しています。誰かがこのエラーが起こっている理由を説明できる場合、またはこのエラーがなぜ発生するのか説明できない場合でも同じクエリを実行する別の方法にもオープンしています。

+0

を役に立てば幸いあなたのコードに何が間違っているのか分かりましたか?私は同様の問題に遭遇しています。 – tayfun

答えて

14
あなたはboto3.dynamodb.conditionsから輸入キーとAttrの機能を使用するときに後のBoto 3 SDKはあなたのための条件式を構築

response = table.query(
    KeyConditionExpression=Key('hash_key').eq(hash_value) & Key('range_key').eq(range_key_value) 

) 

参考:http://docs.aws.amazon.com/amazondynamodb/latest/gettingstartedguide/GettingStarted.Python.04.html

はそれが

+0

これについての質問をフォローしますが、それをバッチ処理する方法があるかどうか知っていますか? – irregular

+0

私はハッシュ値のリストを持っています。 list comprehensionを使ってboolean '|'でリストに加わることができる方法はありますか? '| '.join([Key(' hash_key ').v(v)の値に対応する])の行に沿ったもの' – falsePockets

関連する問題