Jam*_*mes 1 python mongodb amazon-dynamodb
我开始在日常家务中使用 Python,我发现了一个我无法解决的问题。有了这个脚本,只修改集合名(MongoDB)和表名(DynamoDB),整个过程在其他集合中运行的非常好。
在一个集合中(下面的例子),脚本执行得不是很好,因为集合中有浮动数据,比如地理定位数据
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))
Run Code Online (Sandbox Code Playgroud)
发生的错误是:不支持浮点类型。改用十进制类型。
我需要帮助创建一个 def 来扫描对象并将 float 的值替换为小数。有人能帮我吗?
小智 5
当项目通过 boto3 上传时,DynamoDB 需要十进制格式的浮点数。
您需要将 MongoDB 字典中的所有浮点数替换为 Decimal。
首先,将python字典转换回JSON
import json
migrate_json = json.dumps(migrate)
Run Code Online (Sandbox Code Playgroud)
然后,将 JSON 解析回 python 字典,浮点数存储为十进制。
from decimal import Decimal
migrate = json.loads(migrate_json, parse_float=Decimal)
Run Code Online (Sandbox Code Playgroud)
现在上传将工作
batch.put_item(Item=migrate)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
932 次 |
| 最近记录: |