簡體   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