1. 程式人生 > >Python Web 6 —— Python操作MongoDB資料庫

Python Web 6 —— Python操作MongoDB資料庫

前言:

        做網頁開發少不了資料儲存中心,在Java Web中常用的資料庫是MySQL,它是一種關係型的資料庫,但我們在這裡不選用MySQL,而使用非關係型的資料庫MongoDB。

一、安裝和啟動MongoDB:

1.安裝MongoDB:

        下載指定平臺的MongoDB安裝包,這裡我使用的是Mac OS平臺,下載地址如下:

        下載指定版本的MongoDB,並解壓到本地目錄下面,然後在解壓後的目錄下建立一個data/db目錄,並在終端中修改data目錄的許可權:

sudo chown -R data

        例如我是把解壓目錄放到桌面的檔案目錄下面,那麼我的設定過程如下:


        所以我的db目錄為:~/Desktop/Python/tools/mongodb-osx-x86_64-3.2.7/data/db

2.啟動MongoDB:

    啟動方法是在終端中輸入指令:sudo mongod --dbpath [data目錄的地址]

    

    關閉資料庫的方法就是在啟動的終端介面按鍵盤:Ctrl+C

3.下載視覺化資料庫操作工具:

    像這樣的工具其實很多,我使用的是網上別人推薦的一個 ———— Robomongo,開啟軟體,首先需要建立一個數據庫聯結器:


    建立過程非常簡單,只需要設定連線的名稱和ip埠即可,ip要與資料庫啟動時提示的ip一致,本地測試的話可以直接使用預設值localhost建立:

    建立完成後點選連線即可連線到當前啟動的MongoDB資料庫,並檢視其中的內容:

    

4.啟動mongodb常見錯誤如下:

錯誤一:

Failed to unlink socket file /tmp/mongodb-27017.sock errno:1 Operation not permitted
        解決方法:在終端中輸入指令:
rm /tmp/mongodb-27017.sock

錯誤二:

exception in initAndListen: 29 Data directory /data/db not found., terminating

        解決方案

指定當前db存放的目錄:

mongod --dbpath ~/Desktop/Python/tools/mongodb-osx-x86_64-3.2.7/data/db

二、使用python操作MongoDB:

1.安裝pymongo:

        python不能直接操作MongoDB,而是通過pymongo外掛來實現對資料庫的操作的,所以第一步要做的就是安裝pymongo外掛,安裝過程其實非常簡單,直接在終端中輸入一下指令:

pip install pymongo
2.python中使用pymongo:
#encoding:utf-8
from pymongo import MongoClient

con = MongoClient('localhost', 27017) #連線到資料庫
db = con.local                                        #獲取資料庫
collect = db.test                                     #獲取資料庫中的一個Collection

abc={'name':'lzy'}      #建立一個key-value格式的資料
collect.insert(abc)     #將上面建立的資料存入資料庫

        con為建立一個連線,db為所連線資料庫,也可寫為:db=con['local'],collect為所連線的聚集,也可寫為:collect=db['test']。

        上述程式碼完成了將一個key為name,value為lzy的的資料插入到local資料庫集合)中的test文件(聚集)中,可以在Robomongo中檢視插入後的結果:

        

        那麼,資料庫的幾個基本操作:增、刪、改和查在python中通過pymongo的實現程式碼分別如下:

增:abc={'name':'lzy'}      #建立一個key-value格式的資料

       或者一次插入多個key-value:abc={'name':'lsh','age':2}
       collect.insert(abc)

刪:abc={'name':'lzy'}
       collect.remove(abc)  #刪除指定一條資料

       collect.remove()        #刪除此文件的全部資料

改:p = {'name':'lzy'}
       a={'name':'ash'}

       collect.update( p,{"$set":a}) #將原來資料庫的資料p替換為新的資料a

查:

        a.查詢當前集合(假設以local為例)中所有文件的名稱:db.collection_names()

        b.查詢當前文件的名稱:collect.name

        c.查詢聚集的一條記錄:collect.find_one()或者collect.find_one({'name':'lsh'}),假如不存在則返回None

        d.查詢聚集的欄位:collect.find_one({},{'name':1,'age':1})

        e.遍歷聚集:

           for item in collect.find():

                item

          或者是:

for item in collect.find():

                item['name'] #獲取此key對應的value

        f.查詢結果統計:collect.find().count()或者collect.find_one({'name':'lsh'}).count()

        g.查詢結果排序:

           collect.find().sort('age')                                          #預設排序

           collect.find().sort('age',pymongo.ASCENDING)    #升序

           collect.find().sort('age',pymongo.DESCENDING)  #降序

          此外,查詢結果還可以多列排序:

          collect.find().sort('age',pymongo.ASCENDING,'age',pymongo.DESCENDING)