2015-10-22 8 views
5

के साथ एक रेंज कुंजी मुझे AWS Boto3 का उपयोग करने में समस्या है, जिसमें हैश कुंजी के साथ डायनेमो डीबी और एक ही समय कुंजी की आवश्यकता है, जिसमें KeyConditionExpression की सिफारिश की जा रही है।एक हैश कुंजी के साथ क्वेरी डायनेमोडीबी और बोटो 3

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 

मेरी समझ से टाइप एम एक नक्शा या शब्दकोश प्रकार होगा और मैं एक प्रकार का उपयोग कर रहा हूं जो कि एक प्रकार का है और रेंज कुंजी के लिए मेरी टेबल योजना से मेल खाता है। अगर कोई यह समझा सकता है कि यह त्रुटि क्यों हो रही है या मैं एक ही प्रश्न को पूरा करने के एक अलग तरीके के लिए भी खुला हूं, भले ही आप यह समझा नहीं सकें कि यह त्रुटि क्यों मौजूद है।

+0

क्या आपने पता लगाया कि आपके कोड में क्या गलत था? मैं एक समान समस्या में भाग रहा हूँ। – tayfun

उत्तर

14

Boto 3 एसडीके आप के लिए एक स्थिति अभिव्यक्ति का निर्माण करती है जब आप कुंजी और ATTR कार्यों boto3.dynamodb.conditions से आयात का उपयोग करें:

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

मेरे पास हैश मानों की एक सूची है। क्या कोई तरीका है कि मैं सूची समझ का उपयोग कर बूलियन '| 'के साथ एक सूची में शामिल हो सकता हूं? ''|' .join ([कुंजी ('हैश_की') की पंक्तियों के साथ कुछ। मूल्यों में v के लिए eq (v)]' ' – falsePockets

संबंधित मुद्दे