在Lambda python查询中DynamoDb不返回任何数据

时间:2017-07-26 04:41:24

标签: python amazon-dynamodb aws-lambda

我写了这个函数来返回艺术家名称为Joe的表中的数据。但是下面的代码并没有产生任何结果。它首先打印。但之后什么都没有。不确定我做错了什么。

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: ...

1 个答案:

答案 0 :(得分: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语句,而表查找代码则不在此范围内。有意义的是,您只能看到这两个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值何时显着。