python之pymongo


引入

在這里我們來看一下Python3下MongoDB的存儲操作,在本節開始之前請確保你已經安裝好了MongoDB並啟動了其服務,另外安裝好了Python的PyMongo庫。

MongoDB 數據庫安裝與介紹可以查看之前的 MongoDB 教程。

安裝

pip3 install pymongo

 

使用pymongo

一,連接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中,數據是以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中調用數據

>>>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}

查找條件中也可以用正則匹配來匹配calue。

 

六,更新數據

在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

 

完!!!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM