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

如何自动格式化DynamoDB返回项以原样或修改后重新存入?

解决方案

问题根源在于boto3的resource和client对DynamoDB数据的格式要求不同:

  • Resource返回的是原生Python类型(如字符串、Decimal),适合直接在代码中使用
  • Client的put_item方法要求传入带类型标注的DynamoDB格式(如{'S': '字符串值'}、{'N': '数字字符串'})

你可以通过boto3自带的工具完成转换,无需手动修改数据:

方法1:用TypeSerializer转换格式

boto3内置了TypeSerializer类,能自动将原生Python类型转换成Client需要的DynamoDB格式:

from boto3.dynamodb.types import TypeSerializer

# 初始化序列化器
serializer = TypeSerializer()

# 转换单个数据项
serialized_item = {key: serializer.serialize(value) for key, value in foo.items()}

# 现在可以用client正常存入
cdb.put_item(TableName='my-table', Item=serialized_item, ReturnValues="ALL_OLD")

如果需要批量转换多个Item,直接循环处理即可:

serialized_items = [{k: serializer.serialize(v) for k, v in item.items()} for item in my_data]

方法2:直接用Resource的put_item方法

既然你已经通过Resource获取了数据,更简单的方式是直接用Resource对象的put_item方法,它会自动处理类型映射,无需手动转换:

# 直接调用Resource中table对象的put_item
table.put_item(Item=foo, ReturnValues="ALL_OLD")

这种方式省去了格式转换的步骤,更符合boto3 Resource的设计初衷。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 08:10:20