我正在尝试在我的表中创建一个新项目,每次运行以下代码时:
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':经度},”
答案 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函数时,您都不会为创建它们付出代价。