Skip to main content
 首页 » 编程设计

Python:将 MongoDB 迁移到 DynamoDB之float 错误

2025年05月04日23telwanggs

我开始在日常琐事中使用Python,我发现了一个我无法解决的问题。通过这个脚本,只修改集合的名称(MongoDB)和表的名称(DynamoDB),整个过程在其他集合中运行的非常好。

在一个集合中(下面的示例),脚本执行得不是很好,因为集合中有 float 数据,例如地理定位数据

import sys 
 
# Mongo 
import pprint 
from pymongo import MongoClient 
Client = MongoClient('mongodb://localhost:27017/') 
db = Client["developer"] 
collection = db["geolocation"] 
 
# Dynamo 
import boto3 
dynamodb = boto3.resource('dynamodb') 
table = dynamodb.Table('geolocation') 
 
 
# migrate 
count = 0 
with table.batch_writer() as batch: 
    for migrate in collection.find(): 
        del migrate['__v'] 
        del migrate['_id'] 
 
        batch.put_item(Item= migrate) 
 
        # To show process 
        count += 1 
        print(str(collection.count()) + '::' + str(count)) 

发生的错误是:不支持浮点类型。请改用 Decimal 类型。

我需要帮助创建一个 def 来扫描对象并将 float 的值替换为小数。有人可以帮助我吗?

请您参考如下方法:

当项目通过 boto3 上传时,DynamoDB 期望 float 的十进制格式。

您需要用 Decimal 替换 MongoDB 字典中的所有 float 。

首先,将python字典转回JSON

import json 
migrate_json = json.dumps(migrate) 

然后,将 JSON 解析回 python 字典, float 存储为 Decimal。

from decimal import Decimal 
migrate = json.loads(migrate_json, parse_float=Decimal) 

现在可以上传了

batch.put_item(Item=migrate)