DynamoDB PutItem 不创建新项目
DynamoDB PutItem does not create new item
我使用 lambda 检测我的 table 中是否有任何 isActive
记录,如果有则 put_item
更新 ID。
例如,我有一个 ID 为 999999999 的占位符记录,如果我的 table 查询检测到有一个活动记录 (isActive
= True
),它将 put_item
与真实 session_id
和其他数据。
Table记录:
我的 lambda 有以下部分(来自我的 cloudwatch,if...else
语句按预期工作以验证逻辑)。请忽略我复制和粘贴时的缩进问题,代码运行没有问题。
##keep "isActive = True" when there's already an active status started from other source, just updating the session_id to from 999999999 to real session_id
else:
count_1 = query["Items"][0]["count_1"] <<< from earlier part of code to retrieve from current count_1 value from the table.
print(count_1) << get the right '13' value from the current table id = '999999999'
table.put_item(
Item={
'session_id': session_id,
'isActive': True,
'count_1': count_1,
'count_2': count_2
},
ConditionExpression='session_id = :session_id AND isActive = :isActive',
ExpressionAttributeValues={
':session_id': 999999999,
':isActive': True
}
)
但是我的 table 没有得到新项目,主键 session_id
也没有更新。 Table还是上图
我从 documentation 了解到
You cannot use UpdateItem to update any primary key attributes.
Instead, you will need to delete the item, and then use PutItem to
create a new item with new attributes.
但即使 put_item
无法更新主键,至少我希望在没有抛出任何错误代码的情况下从我的代码创建一个新项目?
有人知道发生了什么事吗?谢谢
我用 ConditionExpression
的不同规范解决了它。进行了多种故障排除方法并查明问题来自 ConditionExpression
:
我做了什么 -
添加 boto3.dynamodb.conditions import Key & Attr
的导入
并使用 ConditionExpression
和 ConditionExpression=Attr("session_id").ne(999999999)
并删除旧 ID 项目
table.delete_item(
Key={
'session_id': 999999999
}
)
如果谁有其他更好更简单的方法想要学习
我使用 lambda 检测我的 table 中是否有任何 isActive
记录,如果有则 put_item
更新 ID。
例如,我有一个 ID 为 999999999 的占位符记录,如果我的 table 查询检测到有一个活动记录 (isActive
= True
),它将 put_item
与真实 session_id
和其他数据。
Table记录:
我的 lambda 有以下部分(来自我的 cloudwatch,if...else
语句按预期工作以验证逻辑)。请忽略我复制和粘贴时的缩进问题,代码运行没有问题。
##keep "isActive = True" when there's already an active status started from other source, just updating the session_id to from 999999999 to real session_id
else:
count_1 = query["Items"][0]["count_1"] <<< from earlier part of code to retrieve from current count_1 value from the table.
print(count_1) << get the right '13' value from the current table id = '999999999'
table.put_item(
Item={
'session_id': session_id,
'isActive': True,
'count_1': count_1,
'count_2': count_2
},
ConditionExpression='session_id = :session_id AND isActive = :isActive',
ExpressionAttributeValues={
':session_id': 999999999,
':isActive': True
}
)
但是我的 table 没有得到新项目,主键 session_id
也没有更新。 Table还是上图
我从 documentation 了解到
You cannot use UpdateItem to update any primary key attributes. Instead, you will need to delete the item, and then use PutItem to create a new item with new attributes.
但即使 put_item
无法更新主键,至少我希望在没有抛出任何错误代码的情况下从我的代码创建一个新项目?
有人知道发生了什么事吗?谢谢
我用 ConditionExpression
的不同规范解决了它。进行了多种故障排除方法并查明问题来自 ConditionExpression
:
我做了什么 -
添加 boto3.dynamodb.conditions import Key & Attr
并使用 ConditionExpression
和 ConditionExpression=Attr("session_id").ne(999999999)
并删除旧 ID 项目
table.delete_item(
Key={
'session_id': 999999999
}
)
如果谁有其他更好更简单的方法想要学习