小编Luc*_*cas的帖子

PyMongo SON操纵器/变换不工作(mongodb)

我想在保存到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)

mongodb python-2.7

3
推荐指数
1
解决办法
478
查看次数

标签 统计

mongodb ×1

python-2.7 ×1