<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          Python之讀取MongoDB導(dǎo)出的BSON文件

          共 1606字,需瀏覽 4分鐘

           ·

          2020-12-18 19:29

          BSON是一種類似于JSON的二進制形式的存儲格式,簡稱Binary JSON,它和JSON一樣,支持內(nèi)嵌的文檔對象和數(shù)組對象,但是BSON有JSON沒有的一些數(shù)據(jù)類型,如Date和BinData類型等。

          BSON主要被用作MongoDB數(shù)據(jù)庫中的數(shù)據(jù)存儲和網(wǎng)絡(luò)傳輸格式,能用來表示簡單數(shù)據(jù)結(jié)構(gòu)、關(guān)聯(lián)數(shù)組(MongoDB中稱為“對象”或“文檔”)以及MongoDB中的各種數(shù)據(jù)類型。

          本文將講述如何使用Python來讀取MongoDB導(dǎo)出的BSON文件。

          使用MongoDB導(dǎo)出BSON文件

          使用Studio 3T軟件查看數(shù)據(jù)庫,其中testdb中的內(nèi)容如下:

          testdb數(shù)據(jù)庫


          我們使用Studio 3T軟件的Export功能,將該數(shù)據(jù)庫的內(nèi)容以BSON格式導(dǎo)出,如下圖:

          導(dǎo)出BSON文件


          導(dǎo)出文件成功后,我們解壓壓縮包,即可獲得teacher.bson文件。

          bson模塊讀取BSON文件

          我們使用bson文件來讀取teacher.bson文件,代碼如下:

          #?-*-?coding:?utf-8?-*-
          import?bson
          bson_file?=?open('teacher.bson',?'rb')
          bson_data?=?bson.loads(bson_file.read())
          print(bson_data)

          輸出結(jié)果如下:

          {'_id':?b'5f5f9304d18befbe1149fdba',?'name':?'zhanshan',?'age':?25}

          代碼只能讀取BSON文件的第一個數(shù)據(jù)!這是什么原因呢?

          查看bson.loads源代碼,如下:

          def?loads(data):
          ????"""
          ????????Given?a?BSON?string,?outputs?a?dict.
          ????"""

          ????return?decode_document(data,?0)[1]

          在源代碼中,我們發(fā)現(xiàn)該函數(shù)確實只返回了第一個數(shù)據(jù)。這樣的結(jié)果不能讓人滿意。

          那么解決辦法是什么呢?

          使用pymongo讀取BSON文件

          我們先安裝pymongo模塊,讀取teacher.bson文件的代碼如下:

          #?-*-?coding:?utf-8?-*-
          import?bson
          bson_file?=?open('teacher.bson',?'rb')
          bson_data?=?bson.decode_all(bson_file.read())
          print(type(bson_data))
          for?data?in?bson_data:
          ????print(data)

          輸出結(jié)果如下:

          <class?'list'>
          {'_id':?ObjectId('5f5f9304d18befbe1149fdba'),?'name':?'zhanshan',?'age':?25}
          {'_id':?ObjectId('5f5f9304d18befbe1149fdbb'),?'name':?'lisi',?'age':?36}
          {'_id':?ObjectId('5f5f9304d18befbe1149fdbc'),?'name':?'wangwu',?'age':?27}

          現(xiàn)在我們已經(jīng)讀取了teacher.bson中的全部數(shù)據(jù)!

          本文來自于筆者在工作中碰到的一個讀取BSON文件的困惑,故記錄于此。

          更多閱讀



          程序運行慢?你怕是寫的假 Python


          讓 Pandas DataFrame 性能飛升 40 倍


          用 PyQt 打造具有專業(yè)外觀的GUI(上)


          特別推薦


          程序員摸魚指南


          為你精選的硅谷極客資訊,
          來自FLAG巨頭開發(fā)者、技術(shù)、創(chuàng)投一手消息




          點擊下方閱讀原文加入社區(qū)會員

          瀏覽 87
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  国产精品国产三级国产在线观看 | 日本三级精品视频 | 久久久久久国产精品高清 | 美女脱光色情视频网站亚洲 | 日韩一级视频网站 |