我正在编写一个小的lambda函数来更新DynamoDB中的game
项目。我的game
项目具有participants
属性,该属性是由游戏中每个参与者的participant_id
组成的列表。当游戏还没有任何参与者时(即括号中的下一轮),列表将包含2个null
值:
每次添加新参与者时,我想用一个字符串覆盖null
值。目前,我可以将新的String追加到列表中,但是null
的值仍然保留:
如何使用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"
)
答案 0 :(得分:1)
如果您不需要在列表中添加任何内容,那么您就不想使用list_append
。这样的事情应该可以正常工作:
UpdateExpression="SET participants[0] = <whatever>"
和/或
UpdateExpression="SET participants[1] = <whatever>"
(如果您事先不知道需要设置两个元素中的哪个,则可以随时使用if_not_exists
。)