PyMongo的簡單使用
寫在前面:
平常在處理數據的時候,必不可少地要使用數據庫存取數據,出于一些原因,個人非常喜歡MongoDB這個數據庫。但是在學習過程中發現,網上對PyMongo的中文說明文章很少,并且還有很大一部分是有誤的,所以最好的學習辦法還是通過官方文檔(基本上都是這樣吧)。
其中一部分內容為了方便使用對官方文檔的順序等做了一點改動,此教程可以給不熟悉的人作學習使用。
對PyMongo的簡單說明:
PyMongo是Python中用來操作MongoDB的一個庫。而MongoDB是一個基于分布式文件存儲的數據庫,旨在為WEB應用提供可擴展的高性能數據存儲解決方案。其文件存儲格式是類似于JSON的一種,叫BSON,通俗點理解,就是Python中的字典格式。
所以要利用Python操作MongoDB,有以下兩個步驟:
1.在電腦上安裝MongoDB;
2.在Python上裝入PyMongo的庫。
在使用Pymongo前,除了需要到安裝Pymongo庫以外,還需要到官網下載并安裝MongoDB數據庫到本地。
安裝了MongoDB后,需要在cmd中配置數據庫。在命令行中輸入:
mongod --dbpath x:\MongoDB\data
(注:此處的路徑表示你要創建數據庫的文件夾,其中data文件夾需要自己在MongoDB路徑下創建,系統不會在動幫你生成。)
以上步驟完成后可以在瀏覽器中輸入如果看到信息"It looks like you are trying to access MongoDB over HTTP on the native driver port."說明已經成功,可以開始使用了。
(一)連接MongoClient
使用pymongo的第一步首先是連接Client來使用服務:
from pymongo import MongoClient
Client = MongoClient()
(二)獲取數據庫(database)
在MongoDB中一個實例能夠支持多個獨立的數據庫,你可以用點取屬性的方式來獲取數據庫,或者通過字典的方式獲取:
db = Client.test_database
db = Client['test_database']
(注:'test'可以換成你想要用的名字,比如"python_database")
(三)獲取Collection
Collection是存儲在MongoDB中的一組文件,同獲取database一樣,你可以用點取屬性的方式或者字典的方法獲取:
collection = db.test_collection
collection = db['test_collection']
(四)存儲數據
在MongoDB中,數據是以JSON的類型(即Python中的字典類型)存儲的,在存儲的時候支持調用Python的函數,因此其存儲的數據準確地說是BSON類型。如下面的post:
import datetime
post = ['type':'BSON',
'date':datetime.datetime.utcnow()]
了解完MongoDB的數據格式后,你可以通過以下的方式插入數據(其中.inserted_id將返回ObjectId對象):
document1 = ['x':1]
document2 = ['x':2]
posts = db.posts #你也可以不這樣做,每次通過db.posts調用
post_1 = posts.insert_one(document1).inserted_id
post_2 = posts.insert_one(document2).inserted_id
每個插入的數據對應一個ObjectId,可直接查看:
>>>post_1
ObjectId(...)
>>>post_2
ObjectId(...)
你還可以用insert_many()插入多個文檔:
new_document = [{'x':3},
{'x':4}]
result = posts.insert_many(new_document)
>>>result.inserted_ids
[ObjectId(...),ObjectId(...)]
(五)從MongoDB中調用數據
find_one()函數能夠從數據庫中調出已存儲的數據:
>>>posts.find_one()
['x':'1']
但用find_one()的方法只能獲取一個數據,如果數據庫中存在多個數據時,它返回的是第一個的值。你也可以通過ObjectId來請求數據,效果和上面是一樣的。如果你想打印出全部數據,可以通過迭代的方式獲取:
>>>for data in posts.find():
data
>>>
{u'x':1,
u'x':2,
u'x':3,
u'x':4}
你也可以加入限制性因素來獲取特定的數據:
>>> for post in posts.find({'x':1}):
>>> post
>>>
{u'x':1}
查找條件中也可以用正則匹配來匹配value。
(六)更新數據
在pymongo中可以用update_one()來更新數據:
>>>posts.update_one({'x':4},{'$set':{'x':3}})
其中傳入的第一個參數是你想要更新的數據,第二個是你想要更新的最新數據。其中$set部分是必要元素,如果沒有會報出錯誤。除了$set外還有很多其它的比如$inc,對應著不同的功能,在此先不贅述。
上面只是更新匹配到的第一個數據,同樣地,也可以用update_many()一次更新多個值。
(七)刪除數據
同上,可以用delete_one()和delete_many()方法來刪除數據,括號中是篩選條件:
>>>posts.delete_one({'x':3})
>>>posts.delete_one({'x':2})
(八)計數
如果想知道collection中有多少文檔,可以用.count()請求來獲取符合條件的文檔。
>>>posts.count()
4
>>>posts.find({'x':1})
1
來自:https://zhuanlan.zhihu.com/p/20500518