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
解決方案:
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)