DynamoDB executeStatement参数化PartiQL查询占位符语法问题
错误原因
参数占位符?不需要用单引号包裹。PartiQL参数绑定机制会自动处理字符串类型参数的转义和引号包裹,手动添加单引号会让解析器将'?'识别为普通字符串常量,无法和Parameters数组中的参数完成匹配。
正确写法
executeStatement({ Statement: `select * from "myTable"."myIndex" where "pk" = ? and "sortKey5" >= 50 ORDER BY "sortKey5" DESC`, Parameters: [{"S": pk}] })
补充注意事项
- 占位符按位置和
Parameters数组的元素一一对应,顺序不能错 - 数值、布尔等其他类型的参数同样不需要给占位符加引号,只需要在
Parameters中对应正确的类型标记即可(比如"N"对应数值、"BOOL"对应布尔值) - 如果你使用的是V3版本的AWS SDK for JavaScript,不需要手动添加类型标记,直接传入原生JS值即可,SDK会自动完成类型转换:
// AWS SDK v3 示例 executeStatement({ Statement: `select * from "myTable"."myIndex" where "pk" = ? and "sortKey5" >= ? ORDER BY "sortKey5" DESC`, Parameters: [pk, 50] })
内容的提问来源于stack exchange,提问作者fred_
相关产品推荐
相关产品推荐

