Amazon dynamodb 在DynamoDB中使用list_append和映射列表
我有一个DynamoDB表,其模式与下面类似。我想在Amazon dynamodb 在DynamoDB中使用list_append和映射列表,amazon-dynamodb,dynamodb-queries,Amazon Dynamodb,Dynamodb Queries,我有一个DynamoDB表,其模式与下面类似。我想在jobs属性上运行一个“upsert”函数,该函数将添加jobs属性或附加到列表中 执行代码时,我收到一条错误消息: 调用UpdateItem操作时出错(ValidationException):UpdateExpression无效:运算符或函数的操作数类型不正确;运算符或函数:列表\追加,操作数类型:M 模式: { "jobs": [ { "event_id": "event_id", "job_map":
jobs
属性上运行一个“upsert”函数,该函数将添加jobs属性或附加到列表中
执行代码时,我收到一条错误消息:
调用UpdateItem操作时出错(ValidationException):UpdateExpression无效:运算符或函数的操作数类型不正确;运算符或函数:列表\追加,操作数类型:M
模式:
{
"jobs": [
{
"event_id": "event_id",
"job_map": [
{
"key1": "val1",
"key2": "val2"
}
],
"job_start": "time_stamp"
}
],
"p_key": "some_id"
}
示例/文档:
示例代码:
p_key_string = 'some_id'
event_id = '123'
job_start = 'timestamp_string'
task_map = []
for item in items:
task_map.append({
"M": {
'key1': {"S": item.get('val1')},
'key2': {"S": item.get('val2')}
}
})
args = {
'Key': {
'p_key': p_key_string
},
'UpdateExpression': "SET p_key = :p_key, #ri = list_append(#ri, :vals)",
'ConditionExpression': "attribute_not_exists(p_key) OR p_key = :p_key",
'ExpressionAttributeNames': {
"#ri": "jobs"
},
'ExpressionAttributeValues': {
':p_key': p_key_string,
':vals': {
"L": [{
"M": {
"event_id": { "S": event_id},
"job_start": { "S": job_start},
'job_map': { "L": task_map}
}
}]
}
}
}
dynamo_client.update_item(**args)
基于这个错误,我尝试了一个更简单的查询,但实际上得到了相同的错误
...
':vals': {
"L": [
{ "S": event_id},
{ "S": job_start}
]
}
...
所以我真的不确定我遗漏了什么。我不完全确定我理解为什么,但是通过删除数据类型声明,我能够克服错误。上面的代码有一些额外的错误,但下面的更改似乎对我有效
...
task_map.append({
'key1': 'val1',
'key2': 'val2'
})
...
...
args = {
'Key': {
'p_key': p_key_string
},
'UpdateExpression': "SET jobs = list_append(if_not_exists(jobs, :empty_list), :vals)",
'ExpressionAttributeValues': {
':vals': [{
"event_id": event_id,
"job_start": job_start,
"job_map": task_map
}],
":empty_list": []
}
}
...
我不完全明白为什么,但通过删除数据类型声明,我能够克服错误。上面的代码有一些额外的错误,但下面的更改似乎对我有效
...
task_map.append({
'key1': 'val1',
'key2': 'val2'
})
...
...
args = {
'Key': {
'p_key': p_key_string
},
'UpdateExpression': "SET jobs = list_append(if_not_exists(jobs, :empty_list), :vals)",
'ExpressionAttributeValues': {
':vals': [{
"event_id": event_id,
"job_start": job_start,
"job_map": task_map
}],
":empty_list": []
}
}
...
dynamodb_客户端
实际上是一个表
对象,而不是常规的dynamodb客户端吗
Table
对象将自动将dynamodb数据格式转换为本机数据类型,而常规dynamodb客户端则不会。是dynamodb\u客户端
实际上是Table
对象,而不是常规dynamodb客户端
表
对象将自动将dynamodb数据格式转换为本机数据类型,而常规dynamodb客户端则不会