Boto3 list_append一个值以覆盖列表中的空值

时间:2019-03-08 23:27:39

标签: amazon-web-services aws-lambda amazon-dynamodb boto3

我正在编写一个小的lambda函数来更新DynamoDB中的game项目。我的game项目具有participants属性,该属性是由游戏中每个参与者的participant_id组成的列表。当游戏还没有任何参与者时(即括号中的下一轮),列表将包含2个null值:

Empty participant list

每次添加新参与者时,我想用一个字符串覆盖null值。目前,我可以将新的String追加到列表中,但是null的值仍然保留:

After adding a participant

如何使用boto3用字符串覆盖2个空值之一? (即,添加一个参与者后显示为["participantOneId", Null],添加两个参与者后显示为["participantOneId", "participantTwoId"]的位置) 这是我当前的实现:

import boto3
import json

dynamodb = boto3.resource("dynamodb")
gamesTable = dynamodb.Table('games')

def lambda_handler(event, context):
  # get "next_game_id" and "winner_id" from the event body
  updated_next_game = gamesTable.update_item(
      Key={'id': next_game_id },
      UpdateExpression="SET participants = list_append(participants, :i)",
      ExpressionAttributeValues={
        ':i': [winner_id],
      },
      ReturnValues="ALL_NEW"
  )

1 个答案:

答案 0 :(得分:1)

如果您不需要在列表中添加任何内容,那么您就不想使用list_append。这样的事情应该可以正常工作:

UpdateExpression="SET participants[0] = <whatever>"

和/或

UpdateExpression="SET participants[1] = <whatever>"

(如果您事先不知道需要设置两个元素中的哪个,则可以随时使用if_not_exists。)