我想在保存到MongoDB之前使用操纵器将十进制转换为float.数据来自SQL Server数据库,我使用基于freeTDS的pymssql导入.
我按照MongoDB文档的说明操作,但我一直收到错误:
File "build\bdist.win32\egg\pymongo\collection.py", line 467, in insert_one
File "build\bdist.win32\egg\pymongo\collection.py", line 430, in _insert
bson.errors.InvalidDocument: Cannot encode object: Decimal('5019.13')
Run Code Online (Sandbox Code Playgroud)
这是我的转换代码:
import decimal
class Transform(SONManipulator):
def transform_incoming(self, son, collection):
for (key, value) in son.items():
if isinstance(value, decimal.Decimal):
son[key] = float(value)
elif isinstance(value, dict):
son[key] = self.transform_incoming(value, collection)
return son
Run Code Online (Sandbox Code Playgroud)
在哪里我将它添加到db:
def get(collection):
client = MongoClient(uri)
db = client[database]
db.add_son_manipulator(Transform())
return db[collection]
Run Code Online (Sandbox Code Playgroud)
当我打电话的时候
collection = get('mycollection')
collection.insert_one(object)
Run Code Online (Sandbox Code Playgroud)