如何在DynamoDB ExecuteStatementRequest中转义保留关键字?
解决DynamoDB PartiQL更新语句中保留关键字列名的问题
ExecuteStatementRequest支持和UpdateItem类似的别名替换机制,你可以通过expressionAttributeNames给保留关键字列名设置别名,同时用expressionAttributeValues绑定参数值,具体修改如下:
var response = client.executeStatement(ExecuteStatementRequest.builder() .statement(""" UPDATE "my-table" SET #v = :val WHERE assignmentId='item1#123#item2#456#item3#789' RETURNING ALL NEW * """) .expressionAttributeNames(Map.of("#v", "value")) .expressionAttributeValues(Map.of(":val", AttributeValue.builder().n("12.5").build())) .build());
关键说明:
- 在PartiQL语句中,用
#前缀的占位符(比如#v)代替保留关键字列名value - 通过
expressionAttributeNames将占位符映射到实际的列名 - 建议把值也通过
expressionAttributeValues绑定,避免直接拼接字符串,提升安全性和可读性
原错误是因为
value是DynamoDB PartiQL的保留关键字,直接使用会导致语法解析失败,通过别名替换就能绕过这个限制。
内容的提问来源于stack exchange,提问作者João Pedro Schmitt
相关产品推荐
相关产品推荐

