You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Rust中向DynamoDB的列表属性追加元素?

在Rust中使用DynamoDB的list_append时遇到ValidationException的解决方法

你的代码存在两个关键错误,直接导致了ValidationException:

1. ExpressionAttributeValues的键必须带冒号前缀

DynamoDB要求表达式属性值的占位符键必须以:开头,你之前写的"i"和"value"都缺少这个前缀,这是语法错误的直接原因。

2. list_append的第二个参数必须是列表类型

list_append函数要求两个参数都是列表,你直接传入了单个数值类型(AttributeValue::N),而不是把数值包装成列表(AttributeValue::L)。

修正后的完整代码

#[tokio::main]
async fn main() -> Result<(), Error> {
    let Opt { base } = Opt::from_args();
    let shared_config = make_config(base).await?;
    let client = Client::new(&shared_config);
    
    client
        .update_item()
        .table_name("Humidities")
        .key("id", AttributeValue::N(177.to_string()))
        .update_expression("set #Measurements = list_append(#Measurements, :new_value)")
        .expression_attribute_names("#Measurements", "Measurements")
        // 键带冒号,且值是包含单个元素的列表
        .expression_attribute_values(":new_value", AttributeValue::L(vec![AttributeValue::N(53.to_string())]))
        .return_values(aws_sdk_dynamodb::model::ReturnValue::AllNew)
        .send()
        .await?;
    
    Ok(())
}

关键修正点说明

  • 将expression_attribute_values的键改为:new_value(带冒号),与update_expression中的占位符对应。
  • 使用AttributeValue::L把单个数值包装成列表,因为list_append只能拼接两个列表,无法直接把单个元素追加到列表中。

内容的提问来源于stack exchange,提问作者rherrmannr

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 19:55:18