第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

Pymongo:無(wú)法編碼十進(jìn)制類型的對(duì)象。十進(jìn)制?

Pymongo:無(wú)法編碼十進(jìn)制類型的對(duì)象。十進(jìn)制?

www說(shuō) 2022-10-25 14:43:28
在嘗試將insert_one插入集合之后。我收到此錯(cuò)誤:bson.errors.InvalidDocument: cannot encode object: Decimal('0.16020'), of type: <class 'decimal.Decimal'>當(dāng) JSON 不包含decimal.Decimal對(duì)象時(shí),代碼運(yùn)行良好。如果有解決方案,您能否考慮以遞歸方式對(duì)其進(jìn)行編碼,以使整個(gè) python 字典json_dic兼容以插入到 MongoDB 中(因?yàn)闂l目中有不止一次的類 decimal.Decimal 實(shí)例json.dic)。編輯 1:這是我正在處理的 JSONimport simplejson as jsonfrom pymongo import MongoClientjson_string = '{"A" : {"B" : [{"C" : {"Horz" : 0.181665435,"Vert" : 0.178799435}}]}}'json_dict = json.loads(json_string)this_collection.insert_one(json_dict)這產(chǎn)生 bson.errors.InvalidDocument: cannot encode object: Decimal('0.181665435'), of type: <class 'decimal.Decimal'>編輯 2:不幸的是,我上面的示例過(guò)于簡(jiǎn)化了我現(xiàn)有的 JSON,@ Belly Buster提供的答案(盡管上面的 Json 可以正常工作)出現(xiàn)錯(cuò)誤:AttributeError: 'decimal.Decimal' object has no attribute 'items'使用我的實(shí)際 JSON,所以我在這里提供完整的 JSON,希望能找出問(wèn)題所在(也作為屏幕截圖):json_string = '{  "Setting" : {    "GridOptions" : {      "Student" : "HighSchool",      "Lesson" : 1,      "Attended" : true    },    "Grades" : [      80,      50.75    ],    "Count" : 2,    "Check" : "Coursework",    "Passed" : true  },  "Slides" : [    {      "Type" : "ABC",      "Duration" : 1.5    },    {      "Type" : "DEF",      "Duration" : 0.5    }  ],  "Work" : {    "Class" : [      {        "Time" : 123456789,        "Marks" : {          "A" : 50,          "B" : 100        }      }    ],    "CourseWorkDetail" : [      {        "Test" : {          "Mark" : 0.987654321        },        "ReadingDate" : "Feb162006",        "Reading" : 300.001,        "Values" : [          [            0.98765          ],          [            -0.98765          ]        ]      },      {        "Test" : {          "Mark" : 0.123456789        },        "ReadingDate" : "Jan052010",        "Reading" : 200.005,        "Values" : [          [            0.12345          ],          [            -0.12345          ]        ]      }    ]  },  "listing" : 5}'
查看完整描述

4 回答

?
胡說(shuō)叔叔

TA貢獻(xiàn)1804條經(jīng)驗(yàn) 獲得超8個(gè)贊

編輯:


該convert_decimal()函數(shù)將在復(fù)雜的 dict 結(jié)構(gòu)中執(zhí)行 Decimal 到 Decimal128 的轉(zhuǎn)換:


import simplejson as json

from pymongo import MongoClient

from decimal import Decimal

from bson.decimal128 import Decimal128


def convert_decimal(dict_item):

    # This function iterates a dictionary looking for types of Decimal and converts them to Decimal128

    # Embedded dictionaries and lists are called recursively.

    if dict_item is None: return None


    for k, v in list(dict_item.items()):

        if isinstance(v, dict):

            convert_decimal(v)

        elif isinstance(v, list):

            for l in v:

                convert_decimal(l)

        elif isinstance(v, Decimal):

            dict_item[k] = Decimal128(str(v))


    return dict_item


db = MongoClient()['mydatabase']

json_string = '{"A" : {"B" : [{"C" : {"Horz" : 0.181665435,"Vert" : 0.178799435}}]}}'

json_dict = json.loads(json_string, use_decimal=True)

db.this_collection.insert_one(convert_decimal(json_dict))

print(db.this_collection.find_one())

給出:


{'_id': ObjectId('5ea743aa297c9ccd52d33e05'), 'A': {'B': [{'C': {'Horz': Decimal128('0.181665435'), 'Vert': Decimal128('0.178799435')}}]}}

原來(lái)的:


要將小數(shù)轉(zhuǎn)換為 MongoDB 滿意的 Decimal128,請(qǐng)將其轉(zhuǎn)換為字符串,然后再轉(zhuǎn)換為 Decimal128。此代碼段可能會(huì)有所幫助:


from pymongo import MongoClient

from decimal import Decimal

from bson.decimal128 import Decimal128


db = MongoClient()['mydatabase']

your_number = Decimal('234.56')

your_number_128 = Decimal128(str(your_number))

db.mycollection.insert_one({'Number': your_number_128})

print(db.mycollection.find_one())

給出:


{'_id': ObjectId('5ea6ec9b52619c7b39b851cb'), 'Number': Decimal128('234.56')}


查看完整回答
反對(duì) 回復(fù) 2022-10-25
?
收到一只叮咚

TA貢獻(xiàn)1821條經(jīng)驗(yàn) 獲得超5個(gè)贊

Pymongo 無(wú)法識(shí)別Decimal- 這就是您收到錯(cuò)誤的原因。

正確的 pymongo 插入是coll.insert_one({"number1": Decimal128('8.916')}).

您還需要導(dǎo)入 -from bson import Decimal128

現(xiàn)在,如果您想在不更改Decimal為 Decimal128 的情況下處理您的 JSON 文件,您可以修改導(dǎo)入語(yǔ)句。

from bson import Decimal128 as Decimal
coll.insert_one({"number1": Decimal('8.916')})


查看完整回答
反對(duì) 回復(fù) 2022-10-25
?
BIG陽(yáng)

TA貢獻(xiàn)1859條經(jīng)驗(yàn) 獲得超6個(gè)贊

我建議只添加一個(gè)編解碼器以在插入時(shí)自動(dòng)轉(zhuǎn)換數(shù)據(jù)類型。如果您遞歸地更改數(shù)據(jù)類型以使用 Decimal128 對(duì)象,您可能會(huì)破壞與現(xiàn)有代碼的兼容性。

您可以按照教程在此處的 pymongo 文檔中創(chuàng)建一個(gè)簡(jiǎn)單的 decimal.Decimal 編解碼器


查看完整回答
反對(duì) 回復(fù) 2022-10-25
?
慕無(wú)忌1623718

TA貢獻(xiàn)1744條經(jīng)驗(yàn) 獲得超4個(gè)贊

from bson.decimal128 import Decimal128, create_decimal128_context

from decimal import localcontext


decimal128_ctx = create_decimal128_context()

with localcontext(decimal128_ctx) as ctx:

    horiz_val = Decimal128(ctx.create_decimal("0.181665435"))

    vert_val = Decimal128(ctx.create_decimal("0.178799435"))


doc = { 'A': { 'B': [ { 'C': { 'Horiz': horiz_val, 'Vert': vert_val } } ] } }

result = collection.insert_one(doc)

# result.inserted_id


pprint.pprint(list(collection.find()))


[ {'A': {'B': [{'C': {'Horiz': Decimal128('0.181665435'),

                      'Vert': Decimal128('0.178799435')}}]},

  '_id': ObjectId('5ea79adb915cbf3c46f5d4ae')} ]

筆記:

來(lái)自 PyMongo 的 decimal128 文檔:

為確保計(jì)算結(jié)果始終可以存儲(chǔ)為 BSON Decimal128,請(qǐng)使用返回的上下文create_decimal128_context()(注意:如上面的示例代碼所示)。


查看完整回答
反對(duì) 回復(fù) 2022-10-25
  • 4 回答
  • 0 關(guān)注
  • 256 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)