繁体   English   中英

使用 python 创建项目 AWS Lambda 到 DynamoDB 时出错

[英]Error when creating items AWS Lambda to DynamoDB with python

我试图在我的表中创建一个新项目,并且每次运行以下代码时:

from __future__ import print_function
from decimal import *
import boto3
import json

def my_handler(event, context):
    marker = event['m']
    latitude = Decimal(event['lat']) 
    longitude = Decimal(event['lon'])
    tableminfo = 'minfo'
    client = boto3.client('dynamodb')

    client.put_item(
      TableName = tableminfo, Item = {
      'marker':{'N' : marker},
      'latitude':{'N' : latitude},
      'longitude':{'N' : longitude},
        }
    )

    success = "Success"     
    return {'success' : success}

在 Lambda 中使用以下测试参数

{
  "m": 1,
  "lat": 52.489505,
  "lon": 13.389687
}

我在以下几行收到错误:17, "my_handler", "'longitude':{'N' : longitude},"

您必须将值更新为字符串:

client.put_item(
      TableName = tableminfo, Item = {
      'marker':{'N' : str(marker)},
      'latitude':{'N' : str(latitude)},
      'longitude':{'N' : str(longitude)},
        }
    )

您还可以使用 boto3 为 DynamoDB 提供的更高级别的资源接口。 它为您处理了许多低级细节。 这是使用资源层的代码版本。

假设您的事件如下所示:

{
  "m": 1,
  "lat": 52.489505,
  "lon": 13.389687
}

此代码会将数据保存到 DynamoDB

import boto3

client = boto3.resource('dynamodb')
table = client.Table('minfo')

def my_handler(event, context):
    item = {
        'marker': event['m'],
        'latitude': event['lat'],
        'longitude': event['lon']}
    table.put_item(Item=item)   
    return {'success' : "Success"}

在模块级别创建客户端和表更有效,因为这样您就不会在每次调用 Lambda 函数时都为创建它们付出代价。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM