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

Python中DynamoDB PartiQL查询结果如何去除类型并转换格式?

使用boto3 PartiQL查询DynamoDB后转换结果格式的方法

问题描述

使用boto3客户端通过PartiQL查询DynamoDB表时,返回结果包含DynamoDB的类型标识(如S代表字符串、N代表数字),且数值以字符串形式返回,示例代码及返回结果如下:

查询代码

dynamodb = boto3.client(
    'dynamodb',
    aws_access_key_id='<aws_access_key_id>',
    aws_secret_access_key='<aws_secret_access_key>',
    region_name='<region_name>'
)

resp = dynamodb.execute_statement(Statement='SELECT * FROM TryDaxTable')

当前返回结果

{'some_data': {'S': 'XXX'},
 'sort_key': {'N': '1'},
 'partition_key': {'N': '7'}
}

需要将结果转换为不带类型标识、值为正确数据类型的格式,支持列表和嵌套字典等复杂结构,目标格式如下:

{'some_data': 'XXX',
 'sort_key': 1,
 'partition_key': 7
}

解决方案

方法1:改用boto3 Resource(推荐)

boto3的resource接口会自动将DynamoDB的类型格式转换为原生Python类型,无需手动解析。示例代码:

import boto3

# 初始化DynamoDB Resource
dynamodb = boto3.resource(
    'dynamodb',
    aws_access_key_id='<aws_access_key_id>',
    aws_secret_access_key='<aws_secret_access_key>',
    region_name='<region_name>'
)

# 执行PartiQL查询
resp = dynamodb.execute_statement(Statement='SELECT * FROM TryDaxTable')

# 获取解析后的结果
parsed_items = resp['Items']

此时parsed_items中的每个项都是直接可用的原生类型字典,自动处理嵌套结构和列表。

方法2:使用TypeDeserializer手动解析(适用于必须用Client的场景)

如果需要保留client接口,可以使用boto3内置的TypeDeserializer类来解析DynamoDB格式的数据,它支持递归处理嵌套结构和列表:

import boto3
from boto3.dynamodb.types import TypeDeserializer

# 初始化客户端和反序列化器
dynamodb = boto3.client(
    'dynamodb',
    aws_access_key_id='<aws_access_key_id>',
    aws_secret_access_key='<aws_secret_access_key>',
    region_name='<region_name>'
)
deserializer = TypeDeserializer()

# 执行查询
resp = dynamodb.execute_statement(Statement='SELECT * FROM TryDaxTable')

# 批量解析结果
parsed_items = []
for item in resp['Items']:
    parsed_item = {k: deserializer.deserialize(v) for k, v in item.items()}
    parsed_items.append(parsed_item)

TypeDeserializer会自动识别所有DynamoDB类型标识(包括L列表、M嵌套字典等),并转换为对应的Python类型。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 12:24:19