2017-07-26 19 views
1

私はこの名前をJoeという名前のテーブルから返すようにこの関数を書いています。しかし、以下のコードは何も起こっていません。最初に印刷します。しかし、その後は何もない。私が間違っていることを確認していない。Lambda pythonのクエリでDynamoDbがデータを返さない

from __future__ import print_function # Python 2/3 compatibility 
import json 
import boto3 
from boto3.dynamodb.conditions import Key, Attr 

dynamodb = boto3.resource('dynamodb') 
table = dynamodb.Table('Music') 

def handler(event, context):  
    print("Joe's music") 
    print(table.creation_date_time) 

response = table.query(
    KeyConditionExpression=Key('Artist').eq('Joe') 
) 

for i in response['Items']: 
    print(i['Artist'], ":", i['Artist']) 

これは私が得た結果です。あなたのコードサンプルの一部引用

START RequestId: ...... Version: $LATEST 
Joe's music 
2017-07-19 03:07:54.701000+00:00 
END RequestId: ... 

答えて

2

def handler(event,context):  
    print("Joe's music") 
    print(table.creation_date_time) 

response = table.query(
    KeyConditionExpression=Key('Artist').eq('Joe') 
) 

for i in response['Items']: 
    print(i['Artist'], ":", i['Artist']) 

はインデントを含め、あなたが持っていることを正確にコード、ですか?字下げは、Pythonのプログラム構造にとって重要であることを思い出してください。これは、あなたのhandlerが2 print文だけで構成されていることを意味し、テーブル参照コードはその外にあります。 2 printステートメントの結果しか表示されないことは意味があります。

おそらく、このような意味があります。字下げを変更して、テーブル検索とレスポンス処理コードをhandlerコードのグループにグループ化しました。

def handler(event,context):  
    print("Joe's music") 
    print(table.creation_date_time) 

    response = table.query(
     KeyConditionExpression=Key('Artist').eq('Joe') 
    ) 

    for i in response['Items']: 
     print(i['Artist'], ":", i['Artist']) 

さらに、必要に応じてreturnに値を設定します。 Lambda Function Handler (Python)のAWSドキュメントには、return値が重要であるときの議論を含む詳細があります。

+0

Chrisさん、ありがとうございます。私はこれを学んでおり、このくぼみはとても痛いです。どのような種類の脳がこのロジックを設計しているのかよくわかりません:(AWSのPythonで動作するIDEはありますか?)AWS dosn't code insight etc. – ary

+0

@ary、中括弧のバランスを取るよりもインデントが好きな人もいます。私は思います。:-)私はPython IDEを自分で使っていませんが、[PyCharm](https://www.jetbrains.com/pycharm/)についてよく聞いています。 –

関連する問題