PyMongo的簡單使用

M-DAY 8年前發布 | 30K 次閱讀 MongoDB PyMongo 數據庫 Python開發

寫在前面:

平常在處理數據的時候,必不可少地要使用數據庫存取數據,出于一些原因,個人非常喜歡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

 

 本文由用戶 M-DAY 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!