在Lambda python查询DynamoDb不返回任何数据
问题描述:
我写了这个函数来从表中返回艺术家名字是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: ...
答
引述一段代码样本:
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
值何时显着。
谢谢克里斯,现在工作。我正在学习这个,这个缩进的东西太痛苦了。不知道什么样的大脑设计了这个逻辑:(还有没有什么好的IDE可以与aws python一起工作,AWS没有代码洞察力等。 – ary
@ary,有些人喜欢压缩比平衡大括号更好。我猜。:-)我自己并没有使用Python IDE,但我听说过[PyCharm](https://www.jetbrains.com/pycharm/)的好消息。 –