1. <strong id="7actg"></strong>
    2. <table id="7actg"></table>

    3. <address id="7actg"></address>
      <address id="7actg"></address>
      1. <object id="7actg"><tt id="7actg"></tt></object>

        Python操作MongoDB數(shù)據(jù)庫(一)

        共 3858字,需瀏覽 8分鐘

         ·

        2019-08-16 22:10

        vMglzeSfhq.png


        本篇閱讀時間約為 6 分鐘。

        前言


        干貨文章繼續(xù)出發(fā)!隔的時間有些久了哈,對 MongoDB 安裝回顧的同學(xué),可以看下windows環(huán)境《初識 MongoDB 數(shù)據(jù)庫》。這篇文章結(jié)尾處,介紹到使用圖形化界面來創(chuàng)建了 MongoDB 的庫,表,以及數(shù)據(jù)。


        今天這篇文章,來帶你來玩一玩,如何使用 Python 操作 MongoDB 數(shù)據(jù)庫。


        MongoDB基礎(chǔ)概念


        為了有一個良好的學(xué)習(xí)體驗(yàn),再操作之前簡單的理解下 MongoDB 的基礎(chǔ)數(shù)據(jù)類型會有極大的幫助。

        29hE6d46sI.png

        • MongoDB將數(shù)據(jù)存儲在靈活的,類似JSON的文檔中,這意味著字段可能因文檔而異,并且數(shù)據(jù)結(jié)構(gòu)可以隨時間變化

        • 文檔模型映射到應(yīng)用程序代碼中的對象,使數(shù)據(jù)易于使用

        • 即席查詢,索引和實(shí)時聚合提供了訪問和分析數(shù)據(jù)的強(qiáng)大方法

        • MongoDB是一個分布式數(shù)據(jù)庫,因此內(nèi)置了高可用性,水平擴(kuò)展和地理分布,并且易于使用

        • MongoDB可以免費(fèi)使用。2018年10月16日之前發(fā)布的版本根據(jù)AGPL發(fā)布。2018年10月16日之后發(fā)布的所有版本(包括先前版本的修補(bǔ)程序)都在服務(wù)器端公共許可證(SSPL)v1下發(fā)布。

        這段官方中文,是我從官網(wǎng)上翻譯的,大家簡單看下就好。順便貼了下原版,因?yàn)榧夹g(shù)性文章看原版是最好的!


        如果了解關(guān)系型數(shù)據(jù)庫(如MySQL等)的同學(xué),那么其實(shí)學(xué)習(xí)起 MongoDB 也是非常容易理解的,理解層次上的抽象,便是學(xué)習(xí)的最快方式,我們呢,可以對比下這兩種數(shù)據(jù)庫的區(qū)別,一看便知!

        Wbm85LRFYy.png

        怎么樣,抽象與關(guān)系型數(shù)據(jù)庫一對比,理解是否容易很多呢?


        Python操作MongoDB

        1. 安裝 pymongo?


        首先要借助第三方庫 pymongo ,所以安裝:


        pip?install?pymongo
        


        2. py?測試連接數(shù)據(jù)庫


        kkNnqYTcJZ.png


        import?pymongo?
        client?=?pymongo.MongoClient(host='127.0.0.1')?#連接
        


        首先,調(diào)用?MongoClient 方法對數(shù)據(jù)庫進(jìn)行連接,參數(shù)一般我們寫兩個,host 寫主機(jī) ip ,還有一個是 port 端口號,port默認(rèn)的話是?27017?可以省略。


        db = client.traffic  # 數(shù)據(jù)庫名為 traffic
        print(db)
        


        創(chuàng)建一個名字叫 traffic 的數(shù)據(jù)庫,并且打印返回如上圖所示。


        注意:如果 MongoDB 中無此庫,需要在創(chuàng)建集合并且插入文檔后,數(shù)據(jù)庫方可自動創(chuàng)建。


        什么意思呢?讓我們用命令行工具來查看下,當(dāng) MongoDB 服務(wù)啟動后,可以通過 bin 文件夾下的 mongo 進(jìn)行連接,windows 系統(tǒng)大家可以自行右鍵 shift ,打開cmd進(jìn)行操作,直接類似如下操作:

        twvJKeGN2l.png

        zBrPmnzGZA.png

        通過 show dbs; 命令查看當(dāng)前 MongoDB 的數(shù)據(jù)庫,而實(shí)則上,這里的命令對應(yīng)的就是上一篇中圖形化界面查看的樣子:


        2gw2w4ocby.png


        所以,其實(shí)圖形化界面的背后真諦,對應(yīng)的都是命令行的執(zhí)行。如果你新學(xué)了某一項(xiàng)新的技術(shù),那么如果從命令行倒著往上層學(xué)習(xí),只會事半功倍。


        當(dāng)然,除了以上的操作,還可以通過 py 代碼去查詢:


        db_list = client.list_database_names()
        

        kB2Y88wCtj.png


        代碼的順序,是先執(zhí)行了創(chuàng)建數(shù)據(jù)庫的操作,在執(zhí)行了讀取數(shù)據(jù)庫的操作,可以看到,數(shù)據(jù)庫并沒有被創(chuàng)建。


        3. py 插入?MongoDB?數(shù)據(jù)庫(增加操作,簡稱增)


        import pymongo
        
        client = pymongo.MongoClient(host='127.0.0.1')
        db = client.traffic
        collections = db.person  # 創(chuàng)建集合,student 相當(dāng)于 mysql 的表名
        

        plHC9CiYjO.png


        當(dāng)創(chuàng)建了名為 person 的集合時,執(zhí)行代碼,依然沒有生成數(shù)據(jù)庫。繼續(xù)來為文檔中插入文檔和字段。


        #?創(chuàng)建文檔數(shù)據(jù)
        person_one = {
            'name': '咪哥雜談',
            'age': '24',
            'height': '175',
            'weight': '60'
        }
        result = collections.insert_one(person_one)  # 文檔插入集合
        print(result)??#?打印結(jié)果
        print(result.inserted_id)??#?打印插入數(shù)據(jù)的返回?id?標(biāo)識
        

        A1gwHVRnZL.png


        使用 insert_one 對文檔進(jìn)行單條數(shù)據(jù)插入,返回結(jié)果自帶了一個 inserted_id 的屬性,當(dāng)插入單條數(shù)據(jù)成功時,便返回個唯一 id 標(biāo)識。


        如何驗(yàn)證 MongoDB 中是否成功插入了呢?有三種方案,先來說前兩種。


        其一,最簡單的方式,通過圖形化工具直接進(jìn)行查看,不難發(fā)現(xiàn),當(dāng)我們插入文檔時,數(shù)據(jù)庫可以看到有結(jié)果顯示了:


        0KS7T92Pgl.png

        8Ha6ZFC30z.png

        mnP6Fia9D4.png


        其二,使用命令行的客戶端進(jìn)行查看(沒有圖形化工具的情況下):


        show dbs;  # 展示數(shù)據(jù)庫
        use traffic;  # 使用數(shù)據(jù)庫
        show collections;  # 展示所有集合
        db.person.find().pretty()  # 查詢集合下所有的文檔,并整齊顯示
        


        d81Gm14aJC.png

        r225EUQydp.png

        pretty()中文是漂亮的意思,寫上就是整齊展示,不寫就是普通顯示。


        忘記說了~上面僅僅是一條數(shù)據(jù)插入,但如果你想對多條數(shù)據(jù)插入,可以這樣操作:


        # 創(chuàng)建文檔數(shù)據(jù)
        person_one = {
            'name': '咪哥雜談',
            'age': '24',
            'height': '175',
            'weight': '60'
        }
        
        person_two = {
            'name': '咪哥雜談_two',
            'age': '22',
            'height': '180',
            'weight': '63'
        }
        
        result = collections.insert_many([person_one, person_two])  # 文檔插入集合
        print(result)
        print(result.inserted_ids)
        


        khIlidHdx5.png


        使用 insert_many 對文檔進(jìn)行多條數(shù)據(jù)插入,返回結(jié)果自帶了一個 inserted_ids 的屬性,當(dāng)插入多條數(shù)據(jù)成功時,便返回個數(shù)組唯一 id 標(biāo)識。



        其三,便是使用我們的 py 進(jìn)行查庫操作,下面開新節(jié)點(diǎn)介紹。


        4. py 查詢?MongoDB?數(shù)據(jù)庫(查詢操作,簡稱查)


        查詢可以查詢一條 find_one() 方法:


        WrNBmIzAQ1.png


        查詢多條,調(diào)用 find () 方法:


        BO47SuYYLJ.png


        一般我們用 find() 查詢就行,既然是查詢,當(dāng)然我們可以對其指定想要返回的字段,就像 sql 數(shù)據(jù)庫中 一樣:



        select name,age from person
        


        在 find() 方法里,傳入如下代碼,0代表不要,1代表要,注意,里面是兩個參數(shù),第一個參數(shù)是空的對象:



        result = collections.find({}, {'_id': 0, 'name': 1, 'age': 1})
        for a in result:
            print(a)
        
        result = collections.find({}, {'name': 1, 'age': 1})
        for a in result:
        ????print(a)
        


        B1RADRSmce.png


        發(fā)現(xiàn)二者的區(qū)別了嗎?唯一標(biāo)識 _id 如果不手動置為 0 ,它是不會自動隱藏的,所以當(dāng)你只想查詢 name 和 age 字段時,需要手動?_id 置 0。


        注意:

        同時指定了 0 和 1 則會報錯,除了 _id 與其他字段不同的情況

        cZLoxzZQj0.png

        查詢還可以根據(jù)設(shè)定條件進(jìn)行查詢,如 MySQL 中的這樣:



        select?*?from?person?where?age?=?'22';
        


        在 python 中,要如下使用,僅傳入一個參數(shù):



        result2 = collections.find({'age': '22'})
        


        kfdRDBaGD6.png


        查詢到這里就結(jié)束了,本質(zhì)上來說,MongoDB 還支持一些高級查詢語法,比如通過正則表達(dá)式去查詢,或是當(dāng)條件與數(shù)字進(jìn)行對比判斷時,如何書寫。但本項(xiàng)目中應(yīng)該不涉及到高級查詢,所以就不多介紹了,感興趣的可以看下崔慶才老師的這篇博客,里面寫的通俗易懂。



        https://cuiqingcai.com/5584.html
        


        4

        總結(jié)


        本篇介紹了 py 操作 mongo 的增加查詢操作,還有更新和刪除操作留在下一篇。篇幅有些過長了。


        上周認(rèn)識了一個前輩,他提出的建議是公眾號里,技術(shù)性文章可以寫的短一些,因?yàn)榇蠹业臅r間以及注意力并沒有那么久,我也很認(rèn)可這種建議,所以以后盡量將技術(shù)文章縮短一些去寫,一個系列拆開幾篇文章去介紹。


        不知道大家的意見如何呢?歡迎留言提供些建議。。!


        瀏覽 147
        點(diǎn)贊
        評論
        收藏
        分享

        手機(jī)掃一掃分享

        分享
        舉報
        評論
        圖片
        表情
        推薦
        點(diǎn)贊
        評論
        收藏
        分享

        手機(jī)掃一掃分享

        分享
        舉報
        1. <strong id="7actg"></strong>
        2. <table id="7actg"></table>

        3. <address id="7actg"></address>
          <address id="7actg"></address>
          1. <object id="7actg"><tt id="7actg"></tt></object>
            苍井空无码不卡免费费二区 | 国产手机在线观看 | 皇后高h喷水荡肉np | 欧美午夜操逼 | 成人国产激情视频 | 国产三级在线观看视频 | 日韩a级黄色视频观看 | 一级毛片久久久久久久女人18 | 高潮喷水视频 | 干干操 |