python-3.x - 使用 Alexa 和 lambda 函数从 Dynamodb 读取数据
问题描述
我正在尝试使用 alexa 从我的 dynamo db 表中读取数据,但似乎我的 lambda 函数无法访问我的表。这是从 dynamodb 获取数据的代码:
# Gets the data from dynamodb based on userid
def GetData(session):
userId = session['user']['userId'].split('.')
userId = userId[3]
try:
response = table.query(
KeyConditionExpression=Key('guid').eq(str(userId))
)
# print ("Got data: " + str(len(response)))
print(response)
for item in response['Items']:
final_response = item["command"]
tstamp = item["tstamp"]
if (response['Count'] == 0):
final_response = "No Data with this userid. You can ask to get the userid"
else:
now = datetime.datetime.utcnow()
timestamp = int(round((now - datetime.datetime(2016, 1, 1)).total_seconds()))
if ((timestamp - int(tstamp)) > 60):
final_response = "No Data received from device in past 1 minute"
return final_response
except ClientError as e:
print(e.response['Error']['Message'])
当我向 Alexa 询问我的自定义问题时,我得到的唯一回复是没有此用户 ID 的数据。您可以要求获取用户 ID。当我测试运行我的 lambda 函数时,它运行成功。但它不查询数据库。
解决方案
如果要根据 userId 进行存储和检索,可以使用 ASK SDK 中提供的 persistenceAdapter 接口。看起来你目前没有使用它。我肯定会推荐它,因为它可以更轻松地管理不同 Intent 的处理程序(并提供像这样的有用抽象)。询问 SDK 文档https://developer.amazon.com/en-US/docs/alexa/alexa-skills-kit-sdk-for-python/overview.html
抽象将允许您使用 S3 或 Dynamo 作为实现者。这是 dynamoDB 库。https://github.com/alexa/alexa-skills-kit-sdk-for-python/tree/master/ask-sdk-dynamodb-persistence-adapter
使用 SkillBuilder 构造函数(例如)创建和注册 Dynamo 适配器:https ://github.com/alexa/skill-sample-python-highlowgame/blob/master/lambda/py/lambda_function.py#L16
使用您的适配器(例如):https ://github.com/alexa/skill-sample-python-highlowgame/blob/master/lambda/py/lambda_function.py#L130
使用适配器时,请记住,直到您保存后才会发生 dynamo write 调用,因此您可以随意修改对象,直到您调用保存为止。所有 handler_input 对象都通过 attributes_manager 引用了 persistent_attributes(这也让您可以轻松地使用 session_attributes)
推荐阅读
- r - 用总和约束解决 R 中的简单二次优化
- c# - 为什么回调动作指向的方法不是分配的?
- jenkins-pipeline - 如何在沙盒管道脚本中将 Jenkins 配置为来自 Artifactory 的 @Grab 依赖项
- .net - 是否可以从 Powershell 脚本生成 MSIL?
- linux - 为什么 dotnet 在 Linux 上产生多个进程?
- reactjs - 想用 redux 给每个元素不同的状态
- mpandroidchart - mpandroidchart,一段时间没有数据时不画线
- assembly - 为什么汇编程序可以在指令中计算复数?
- nuxt.js - nuxt js在项目开始有地方跑吗
- c# - C# .NET 调用扫描器管理器并显示图片