簡體   English   中英

從 dynamodb 更新項目 node.js 中刪除“保留關鍵字”

[英]Removing the "reserved keyword" from dynamodb update item node js

我能夠為保留關鍵字設置值,但不能刪除 dynamodb 中的某些關鍵字。 我的表達如下。 如果我這樣給出,則無法刪除數據。 但是能夠刪除大小。

Invalid UpdateExpression:屬性名是保留關鍵字; 保留關鍵字:data

{
  ConditionExpression: "#id = :id",
  ExpressionAttributeNames: {
    "#id": "id",
    “#name": “name",
 },
 ExpressionAttributeValues: {
    ":id": “1234566",
    “:name": “John",
 },
  Key: {
     id: "1234566",
  },
  ReturnValues: "ALL_NEW",
  TableName: “table_name",
  UpdateExpression: "SET #name = :name REMOVE size, data",
}

修改為在表達式屬性名稱中包含數據,如下所示。 仍然拋出錯誤。

{
  ConditionExpression: "#id = :id",
  ExpressionAttributeNames: {
    "#id": "id",
    “#name": “name",
    “#size": “size",
    “#data": “data",
},
  ExpressionAttributeValues: {
     ":id": “1234566",
    “:name": “John",
   “:size": undefined,
   “:data": undefined,
 },
  Key: {
   id: "1234566",
  },
  ReturnValues: "ALL_NEW",
  TableName: "table_name",
  UpdateExpression: "SET #name = :name, #size = :size, #data = 
    :data REMOVE size, data”,
  }

從 ExpressionAttributeValues 和 SET UpdateExpression 中刪除大小和數據。 添加 #size 和 #data 到 REMOVE on UpdateExpression 而不是 size 和 data。

{
    ConditionExpression: "#id = :id",
    ExpressionAttributeNames: {
       "#id": "id",
       “#name": “name",
       “#size": “size",
       “#data": “data",
     },
    ExpressionAttributeValues: {
       ":id": “1234566",
       “:name": “John"
    },
   Key: {
     id: "1234566",
   },
   ReturnValues: "ALL_NEW",
   TableName: "table_name",
   UpdateExpression: "SET #name = :name, REMOVE #size, #data”,
}

DynamoDB 中的保留字動態地執行此操作,您只需提供一個 json object 和這個 function 它是動態創建的 -ExpressionAttributeNames -ExpressionAttributeValues -UpdateExpression 也跳過 dynamodb 的保留關鍵字

def generate_update_att(body):
    """
    #############input
    body={
    'newval':newData['newval'],
    'lastname':newData['lastname'],
    'name':newData['name']
    }
    #################output
    -ExpressionAttributeNames
    -ExpressionAttributeValues
    -UpdateExpression
    """
    UpdateExpression = ["set "]
    ExpressionAttributeValues = dict()
    ExpressionAttributeNames=dict()

    for key, val in body.items():
        UpdateExpression.append(f" #{key} = :{key},")
        ExpressionAttributeValues[f":{key}"] = val
        ExpressionAttributeNames[f"#{key}"] = key
    return "".join(UpdateExpression)[:-1], ExpressionAttributeValues,ExpressionAttributeNames

function 撥打

my_data={
'newval':newData['newval'],
'lastname':newData['lastname'],
'name':newData['name']
}
a, v,z = generate_update_att(my_data)
my_table.update_item(
    Key={'id':my_id},
    UpdateExpression=my_UpdateExpression,
    ExpressionAttributeValues=dict(my_ExpressionAttributeValues),
    ExpressionAttributeNames=dict(my_ExpressionAttributeNames)
)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM