如何在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
相关产品推荐
相关产品推荐

