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

dynamodb boto3中更新_项的示例

章学义
2023-03-14

在文档之后,我尝试创建一个update语句,该语句将更新或添加dynamodb表中的一个属性(如果不存在)。

我在试这个

response = table.update_item(
    Key={'ReleaseNumber': '1.0.179'},
    UpdateExpression='SET',
    ConditionExpression='Attr(\'ReleaseNumber\').eq(\'1.0.179\')',
    ExpressionAttributeNames={'attr1': 'val1'},
    ExpressionAttributeValues={'val1': 'false'}
)

我得到的错误是:

botocore.exceptions.ClientError:调用UpdateItem操作时发生错误(ValidationException):ExpressionAttributeNames包含无效键:语法错误;键:“attr1”

如果有人做了类似于我正在努力实现的事情,请分享例子。

共有3个答案

郎子平
2023-03-14

原始代码示例:

response = table.update_item(
    Key={'ReleaseNumber': '1.0.179'},
    UpdateExpression='SET',
    ConditionExpression='Attr(\'ReleaseNumber\').eq(\'1.0.179\')',
    ExpressionAttributeNames={'attr1': 'val1'},
    ExpressionAttributeValues={'val1': 'false'}
)

固定的:

response = table.update_item(
    Key={'ReleaseNumber': '1.0.179'},
    UpdateExpression='SET #attr1 = :val1',
    ConditionExpression=Attr('ReleaseNumber').eq('1.0.179'),
    ExpressionAttributeNames={'#attr1': 'val1'},
    ExpressionAttributeValues={':val1': 'false'}
)

在标记的答案中,还显示了一个范围键,因此也应该包含在Key中。update_item方法必须查找要更新的确切记录,没有批量更新,并且不能更新筛选为条件的值范围以获取单个记录。条件表达式对于使更新具有幂等性是有用的;也就是说,如果值已经是该值,则不要更新该值。它不像sqlwhere子句。

关于看到的具体错误。

是更新表达式中使用的键占位符列表,如果键是保留字,则非常有用。

从文档中,“表达式属性名称必须以#开头,后面跟着一个或多个字母数字字符”。这个错误是因为代码没有使用以#开头的ExpressionAtiniteName,也没有在UpdateExpress中使用它。

表达式属性值是要更新到的值的占位符,它们必须以开头:

吕学
2023-03-14

关于使用boto3的Dynamodb更新的细节在网上看起来非常稀少,所以我希望这些替代解决方案是有用的。

import boto3

table = boto3.resource('dynamodb').Table('my_table')

# get item
response = table.get_item(Key={'pkey': 'asdf12345'})
item = response['Item']

# update
item['status'] = 'complete'

# put (idempotent)
table.put_item(Item=item)
import boto3

table = boto3.resource('dynamodb').Table('my_table')

table.update_item(
    Key={'pkey': 'asdf12345'},
    AttributeUpdates={
        'status': 'complete',
    },
)
养鸿运
2023-03-14

在这里找到了一个工作示例,将表的所有索引列为键非常重要,这需要在更新之前进行额外的查询,但它可以工作。

response = table.update_item(
    Key={
        'ReleaseNumber': releaseNumber,
        'Timestamp': result[0]['Timestamp']
    },
    UpdateExpression="set Sanity = :r",
    ExpressionAttributeValues={
        ':r': 'false',
    },
    ReturnValues="UPDATED_NEW"
)
 类似资料:
  • 我试图更新DynamoDB表中的项目。我写的代码正在更新项目,但是当我添加一个标题为“源代码/目标”的列时,它会给出一个“验证异常”异常。 用于更新的代码- 我得到的错误是- 调用UpdateItem操作时发生错误(ValidationException):无效的UpdateExpression:语法错误;标记:\“/\”,靠近:\“源/目标” 这个怎么解决?

  • 问题内容: 是否有任何预先存在的Maven插件或命令来更新POM中的依赖关系?示例:(如果这是在我的POM中) 有没有可以运行的命令或插件来将依赖关系更新为: 问题答案: 尝试使用maven-versions-plugin,尤其是versions:use-latest-versions目标。

  • 问题内容: 我一直在尝试找出如何更新dynamoDB中的项目,但没有成功。 我知道如何添加和删除项目,但不更新。 这是我的代码: 问题答案: 看来您正在尝试使用Expression更新项目,在这种情况下,您不正确。无论是和用于占位符代替你的表达。 我想如果您想为某项设置属性,您的代码将类似于以下内容: 这将更新一个看起来像这样的项目: 对此:

  • 在…上https://play.nativescript.org/ 是一个名为的组件,在HelloWorld.vue中使用时,它如下所示,但在我家附近移动并等待或再次按下按钮时,位置不会更改/更新。我将和设置为1米,但也尝试使用。可能是什么问题?

  • 问题内容: 在我们的数据库中,有一个用创建的表。现在,我们使用此表创建了一个视图。我们想为此视图添加聚簇索引。 创建聚簇索引时,它会显示一个错误,例如无法创建索引,因为此特定表的ANSI_NULL已关闭。 该表包含大量数据。因此,我想将此选项更改为ON,而不会丢失任何数据。 有什么方法可以更改表来修改此选项。请提出您的建议。 问题答案: 这是交叉发布在数据库管理员上的,所以我也可以在这里发布我的答

  • 我在我的Eclipse中有一个简单的gradle项目。我更新了build.gradle以包含一些apache http JAR... 但是,在我的代码中,我引用了一些Apache HTTP内容: 我试着做一次清洁,但那不起作用。我的gradle插件是: