当前位置: 首页 > 知识库问答 >
问题:

如何使用Boto3将项添加到Dynamodb上的字符串_集

辛弘壮
2023-03-14

我已经阅读了官方的AWS文档和几个论坛,但是我仍然找不到我在使用Python/Boto3和Dynamodb向string_集合添加项目时做错了什么。这是我的密码:

table.update_item(
                Key={
                    ATT_USER_USERID: event[ATT_USER_USERID]
                },
                UpdateExpression="add " + key + " :val0" , 
                ExpressionAttributeValues = {":val0" : set(["example_item"]) },
            )

我得到的错误是:

调用UpdateItem操作时发生错误(ValidationException):更新表达式中的操作数的数据类型不正确\“

共有2个答案

赫连黎昕
2023-03-14

基于@joe_stech的回答,您现在可以这样做,而不必定义类型。

一个例子是:

import boto3


class StringSetTable:
    def __init__(self) -> None:
        dynamodb = boto3.resource("dynamodb")
        self.dynamodb_table = dynamodb.Table("NAME_OF_TABLE")

    def get_str_set(self, key: str) -> typing.Optional[typing.Set[str]]:
        response = self.dynamodb_table.get_item(
            Key={KEY_NAME: key}, ConsistentRead=True
        )

        r = response.get("Item")
        if r is None:
            print("No set stored")
            return None
        else:
            s = r["string_set"]
            s.remove("EMPTY_IF_ONLY_THIS")
            return s

    def add_to_set(self, key: str, str_set: typing.Set[str]) -> None:
        new_str_set = str_set.copy()
        new_str_set.add("EMPTY_IF_ONLY_THIS")

        self.dynamodb_table.update_item(
            Key={KEY_NAME: key},
            UpdateExpression="ADD string_set :elements",
            ExpressionAttributeValues={":elements": new_str_set},
        )
蓝鸿哲
2023-03-14

看起来你为自己想出了一个方法,但对于来这里寻找答案的其他人来说:

  1. “Key”语法需要数据类型(如“S”或“N”)

下面是我刚刚运行的一个例子(我有一个现有的集,test_set,有4个现有的值,我添加了一个第五个,字符串“五”):

import boto3
db = boto3.client("dynamodb")
db.update_item(TableName=TABLE,
               Key={'id':{'S':'test_id'}},
               UpdateExpression="ADD test_set :element",
               ExpressionAttributeValues={":element":{"SS":['five']}})

所以在前面,字符串集看起来像['one','two','three','four'],在后面,它看起来像['one','two','three','four','five']

 类似资料:
  • 问题内容: 我在Java程序中有两个字符串,我想以某种方式混合以形成两个新字符串。为此,我必须从每个字符串中提取一些构成字符并将其添加以形成新的字符串。我有这样的代码(this.eka和this.toka是原始字符串): 我正在获取.charAt(x)部分的数字,那么如何将字符转换为字符串? 问题答案: 只使用永远使用代替 例如,当位置arent不是固定值而变量 其中x,y,z是保存从中提取位置的

  • 问题内容: 当我使用定义变量时,该字符串不会添加到字符串池中,对吗? 现在,当我定义另一个而不是时,我将其定义为突然。(或我的大学老师说)。这是为什么?是什么使这个字符串突然变成字符串池字符串? 问题答案: 当我用new定义一个StringBuffer变量时,该字符串没有添加到字符串池中,对吗? 创建a 根本不会创建a 。 现在,当我定义另一个StringBuffer而不是new时,我突然将其定义

  • 问题内容: 我是Java新手,所以我几乎不需要帮助 我有 我想向此数组(脚本)添加新的字符串(string1,string2)作为示例 我想在以后的阶段中不添加新字符串 我该怎么办? 问题答案: 您无法在Java中调整数组的大小。 声明数组的大小后,它将保持固定。 相反,您可以使用具有动态大小的对象,这意味着您无需担心其大小。如果数组列表的大小不足以容纳新值,则它将自动调整大小。

  • 我试图用Python和Boto3将JSON文件加载到AWS dynamoDB中时遇到了问题,因为该文件具有子级别JSON。 例如,我有以下代码: 在这个布局中,我创建了一个表在AWS动态数据库,但只适用于JSON在一个层次的结构,如: 但是,如果我想把一个JSON文件与子层?如何使用Boto3创建此表?以及如何输入文件?像这样: 我在网上阅读了这两个文档并搜索了一些教程,但我找不到如何做到这一点。

  • 我想做一个函数,将字符串添加到字符串中 我这样尝试过: 主要功能 在addLine(字符串文本,字符串行) 我知道=在java中的String make new实例之间的操作。但是,上层代码不起作用。 我如何制作一个向字符串添加字符串的函数?

  • 问题内容: 我试图将字符串数组作为参数传递给Wetland类的构造函数;我不明白如何将字符串数组的元素添加到字符串数组列表。 问题答案: 您已经具有内置方法:- 注 : -您应该使用没有。 返回一个不同的-> ,不能将其类型转换为。 然后,您将不得不使用方法,这不是很好。所以就用 注意 :-返回的列表是固定大小的列表。如果要向列表中添加某些内容,则需要创建另一个列表,并用于向其中添加元素。所以,那