Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/jsf/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Amazon dynamodb boto3 Dynamodb表更新保存为对象而不是数字_Amazon Dynamodb_Boto3 - Fatal编程技术网

Amazon dynamodb boto3 Dynamodb表更新保存为对象而不是数字

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

我在boto3有这个更新

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'
        }
    }
)