使用python将项目AWS Lambda创建为DynamDb时出错

时间:2016-01-27 10:46:30

标签: python amazon-dynamodb aws-sdk aws-lambda

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

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”       “'经度':{'N':经度},”

2 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:0)

您还可以使用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函数时,您都不会为创建它们付出代价。