我开始在日常琐事中使用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)
