首页 > 解决方案 > 使用 Python 更新 DynamoDB 表中的 JSON 记录

问题描述

我有一个 JSON 记录,如下所示:

 {'ip_address': data['src_ip'],
  'first_seen': data['timestamp'],
  'last_seen': data['timestamp']
                        }

ip_address记录作为主键存储在 DynamoDB 表中。

当相同的 IP 再次出现时,我想更新最后一次看到的值。我用以下几行创建了一个函数:

def update_db(json_result):
    ddb_data = json.loads(json.dumps(json_result), parse_float=Decimal)
    database = boto3.resource('dynamodb', endpoint_url="https://dynamodb.us-west-2.amazonaws.com")
    table = database.Table('IPData')
    print("adding :", json_result)
    #db_add = table.put_item(Item = ddb_data)
    response = table.update_item(
                        Key = {
                            'ip_address': json_result['ip_address'] 
                        },
                        UpdateExpression="SET 'last_seen' = :s",
                        ExpressionAttributeValues = {
                                        ':s': json_result['last_seen']
                        },
                        ReturnValues="UPDATED_NEW"
                    )
    return response

这会导致错误:

{
  "errorMessage": "An error occurred (ValidationException) when calling the UpdateItem operation: Invalid UpdateExpression: Syntax error; token: \"'\", near: \"SET 'last_seen\"",
  "errorType": "ClientError",

不确定我的语法有什么问题。有人可以帮我解决这个问题。

标签: pythonpython-3.xamazon-dynamodb

解决方案


请参阅文档以获取更新表达式此处boto3的示例。

UpdateExpression可能应该是(没有单引号):

                        UpdateExpression="SET last_seen = :s",

推荐阅读