Amazon dynamodb boto3 Dynamodb表更新保存为对象而不是数字
我在boto3有这个更新Amazon dynamodb boto3 Dynamodb表更新保存为对象而不是数字,amazon-dynamodb,boto3,Amazon Dynamodb,Boto3,我在boto3有这个更新 dynamo.update_item( Table='table1', Key={ 'partition_key': id, 'sort_key': id_2 }, UpdateExpression=f"s
dynamo.update_item(
Table='table1',
Key={
'partition_key': id,
'sort_key': id_2
},
UpdateExpression=f"set {attribute} = :val",
ExpressionAttributeValues={
":val": {"N": f"{value}"}
},
ReturnValues="UPDATED_NEW"
)
我以为会是这样
{
"total": 5,
"time": 80,
"users": 1,
"app_id": "PRODUCT_ID",
"sort_key": "abcde"
}
然而,它是这样保存的
{
"total": {
"N": "5"
},
"time": {
"N": "80"
},
"users": {
"N": "1"
},
"app_id": "PRODUCT_ID",
"sort_key": "abcde"
}
如果我这么做的话
ExpressionAttributeValues={
":val": value
},
Python json序列化失败
如何使用in-Number数据类型保存它?这是DynamoDB的“原始”对象语法,“N”告诉您它的类型(本例中为数字)以及它旁边的值已序列化(它需要序列化,因为它来自http请求)
您可以使用boto3的高级表对象,它会自动为您转换它。但它只是一个助手,最终它将被完全相同地存储
参考:
它将自动将Python类型转换为DynamoDB类型,并且您也不需要使用“ExpressionAttributeValues”,还有一种更具Python风格的语法:
dynamodb = boto3.resource('dynamodb')
table = dynamodb.Table('table1')
table.update_item(
Key={
'partition_key': id,
'sort_key' : id_2
},
AttributeUpdates={
'attribute': {
'Value': value,
'Action': 'DELETE'
}
}
)
这是DynamoDB的“raw”对象语法,“N”告诉您它的类型(本例中为数字)以及它旁边的值已序列化(它需要序列化,因为它来自http请求)
您可以使用boto3的高级表对象,它会自动为您转换它。但它只是一个助手,最终它将被完全相同地存储
参考:
它将自动将Python类型转换为DynamoDB类型,并且您也不需要使用“ExpressionAttributeValues”,还有一种更具Python风格的语法:
dynamodb = boto3.resource('dynamodb')
table = dynamodb.Table('table1')
table.update_item(
Key={
'partition_key': id,
'sort_key' : id_2
},
AttributeUpdates={
'attribute': {
'Value': value,
'Action': 'DELETE'
}
}
)