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

使用PartiQL向DynamoDB列表属性追加值时遇语法错误求助

问题

尝试使用PartiQL语法向DynamoDB中的现有列表属性追加值,目标项主键由pk(userId)和sk(happeningId)组成,参数如下:

table_name = test_table
userId = "user09hfh47egd53tgd"
happeningId = "happ09hdg2536dget7354tdg"
contactId = "C0003"
decision = "accept"

编写了如下代码,根据decision的值更新accept或cancel列表:

if decision == "accept":
    stmt = f"UPDATE \"{table_name}\" SET accept = list_append(accept, :'{contactId}') WHERE pk='{userId}' AND sk='{happeningId}'"
    print(stmt)
    resp = dynamodb_client.execute_statement( Statement=stmt )
else:
    stmt = f"UPDATE \"{table_name}\" SET cancel = list_append(cancel, :'{contactId}') WHERE pk='{userId}' AND sk='{happeningId}'"
    print(stmt)
    resp = dynamodb_client.execute_statement( Statement=stmt )

生成的最终语句为:

UPDATE "test_table" SET accept = list_append(accept, :'C0003') WHERE pk='user09hfh47egd53tgd' AND sk='happ09hdg2536dget7354tdg'

执行时出现错误:

ClientError: An error occurred (ValidationException) when calling the ExecuteStatement operation: Statement wasn't well formed, can't be processed: Unexpected term

请问哪里操作出错了?

解答

你的代码存在两个核心错误:

  1. PartiQL参数绑定格式错误
    你使用了:'{contactId}'的写法,这不符合PartiQL语法规范。参数占位符只需写:参数名,不需要额外加单引号,且参数值必须通过Parameters参数传递,不能直接拼接进SQL语句——这种拼接不仅会触发语法错误,还存在SQL注入风险。

  2. list_append参数类型不匹配
    list_append函数要求第二个参数是列表类型,但你直接传入了单个字符串值。正确做法是将contactId包裹在列表中,比如[:contactId]。

修正后的代码如下:

params = {
    ":pk": userId,
    ":sk": happeningId,
    ":contactId": contactId
}

if decision == "accept":
    stmt = f'UPDATE "{table_name}" SET accept = list_append(accept, [:contactId]) WHERE pk=:pk AND sk=:sk'
else:
    stmt = f'UPDATE "{table_name}" SET cancel = list_append(cancel, [:contactId]) WHERE pk=:pk AND sk=:sk'

print(stmt)
resp = dynamodb_client.execute_statement(Statement=stmt, Parameters=params)

关键修正说明

  • 所有变量(包括主键)统一使用参数绑定,避免直接拼接SQL语句,同时符合PartiQL语法要求。
  • 将contactId放入列表[:contactId]中,满足list_append对参数类型的要求。
  • 参数通过Parameters字典传递给execute_statement方法,而非直接嵌入SQL字符串。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 00:05:23