2017-07-26 74 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

谢谢克里斯,现在工作。我正在学习这个,这个缩进的东西太痛苦了。不知道什么样的大脑设计了这个逻辑:(还有没有什么好的IDE可以与aws python一起工作,AWS没有代码洞察力等。 – ary

+0

@ary,有些人喜欢压缩比平衡大括号更好。我猜。:-)我自己并没有使用Python IDE,但我听说过[PyCharm](https://www.jetbrains.com/pycharm/)的好消息。 –