日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
Python操作MongoDB基礎(chǔ)講解

 MongoDB是一種面向文檔型的非關(guān)系型數(shù)據(jù)庫(NoSQL),非關(guān)系數(shù)據(jù)庫中是以鍵值對存儲,結(jié)構(gòu)不固定,易存儲,減少時間和空間的開銷。

創(chuàng)新互聯(lián)公司致力于互聯(lián)網(wǎng)網(wǎng)站建設(shè)與網(wǎng)站營銷,提供網(wǎng)站設(shè)計制作、做網(wǎng)站、網(wǎng)站開發(fā)、seo優(yōu)化、網(wǎng)站排名、互聯(lián)網(wǎng)營銷、成都小程序開發(fā)、公眾號商城、等建站開發(fā),創(chuàng)新互聯(lián)公司網(wǎng)站建設(shè)策劃專家,為不同類型的客戶提供良好的互聯(lián)網(wǎng)應(yīng)用定制解決方案,幫助客戶在新的全球化互聯(lián)網(wǎng)環(huán)境中保持優(yōu)勢。

文檔型數(shù)據(jù)庫通常是以JSON或XML格式存儲數(shù)據(jù),而Mongodb使用的數(shù)據(jù)結(jié)構(gòu)是BSON,即二進(jìn)制JSON。和JSON相比,BSON提高了存儲和掃描效率,但空間占用會更多一些。

本文默認(rèn)已經(jīng)安裝了MongoDB服務(wù)器,著重介紹Python操作MongoDB的庫PyMongo,在命令行中輸入如下內(nèi)容安裝:

 
 
 
 
  1. # Windows 
  2. pip install pymongo 
  3. # Mac 
  4. pip3 install pymongo 

一、連接服務(wù)器

連接服務(wù)器需要提供一個地址和接口

 
 
 
 
  1. import pymongo 
  2. client = pymongo.MongoClient(host='localhost', 27017) 
  3. # 地址和端口也可以用一個字符串完成 
  4. client = pymongo.MongoClient('mongodb://localhost:27017/') 

27017 是默認(rèn)端口。如果設(shè)置過密碼進(jìn)行連接就不能簡單使用上面的代碼了,需要在代碼中帶上密碼:

 
 
 
 
  1. import pymongo 
  2. client = pymongo.MongoClient(host='localhost', 27017) 
  3. auth = mongo_client.admin 
  4. auth.authenticate('用戶名', '密碼') 

連接服務(wù)器可以用下面的代碼判斷是否成功:

 
 
 
 
  1. print(client.server_info())  

二、獲取數(shù)據(jù)庫

獲取數(shù)據(jù)庫有以下兩種表述方法(以數(shù)據(jù)庫 data 為例):

 
 
 
 
  1. # 方法一 
  2. db = client['data'] 
  3. # 方法二 
  4. db = client.data 

另外需要說明,MongoDB不需要提前創(chuàng)建好數(shù)據(jù)庫,而是直接使用,如果發(fā)現(xiàn)沒有則自動創(chuàng)建一個 testdb 的數(shù)據(jù)庫:

 
 
 
 
  1. db = client.testdb 

三、獲取集合

非關(guān)系型數(shù)據(jù)庫中的集合類似于關(guān)系型數(shù)據(jù)庫中的表獲取集合與獲取數(shù)據(jù)庫類似,同樣有兩種方法(以集合 practice 為例):

 
 
 
 
  1. collection = db['practice'] 
  2. # 方法二 
  3. collection = db.practice 

四、插入數(shù)據(jù)

下面的操作進(jìn)行前默認(rèn)已經(jīng)通過代碼獲取到了 practice 集合:

 
 
 
 
  1. import pymongo 
  2. client = pymongo.MongoClient(host='localhost', 27017) 
  3. db = client.data 
  4. collection = db.practice 

4.1 插入單條數(shù)據(jù)

數(shù)據(jù)形式是字典,可以通過 insert_one 完成單個數(shù)據(jù)的寫入:

 
 
 
 
  1. data = { 
  2.     'name' : 'Chenxi', 
  3.     'text' : 'Hello World', 
  4.     'tags' : ['a', 'b', 'c'] 
  5. collection.insert_one(data) 

在MongoDB中,每條數(shù)據(jù)都有_id屬性來唯一標(biāo)識??梢暂敵龇祷氐膇d確認(rèn)數(shù)據(jù)情況:

 
 
 
 
  1. result = collection.insert_one(data) 
  2. print(result.inserted_id) 

4.2 插入多條數(shù)據(jù)

如果有多條數(shù)據(jù),每條數(shù)據(jù)形式依然是字典,但需要組合成字典列表的形式后用 insert_many() 完成寫入:

 
 
 
 
  1. data1 = { 
  2.     'name' : 'Chenxi', 
  3.     'text' : 'Hello World', 
  4.     'tags' : ['a', 'b', 'c'] 
  5. data2 = { 
  6.     'name' : 'Zaoqi', 
  7.     'text' : 'Hello World', 
  8.     'tags' : ['a', 'b', 'c'] 
  9. collection.insert_many([data1, data2]) 

五、刪除數(shù)據(jù)

5.1 刪除單條數(shù)據(jù)

刪除一條數(shù)據(jù)。若刪除條件相同匹配到多條數(shù)據(jù),默認(rèn)刪除第一條。如上例中插入的兩條數(shù)據(jù)均符合 {'text' : 'Hello World'} 那么通過 delete_one 會刪除第一條數(shù)據(jù),保留 {'name' : 'Zaoqi'} 這條數(shù)據(jù):

 
 
 
 
  1. collection.delete_one({'text' : 'Hello World'}) 

5.2 刪除多條數(shù)據(jù)

刪除滿足條件的所有數(shù)據(jù)。如上例中插入的兩條數(shù)據(jù)均符合 {'text' : 'Hello World'} 那么通過 delete_many 會刪除全部兩條數(shù)據(jù):

 
 
 
 
  1. collection.delete_many({'text' : 'Hello World'}) 

六、更新數(shù)據(jù)

6.1 更新單條數(shù)據(jù)

類似刪除單條數(shù)據(jù),只會更新滿足條件的第一條數(shù)據(jù)。代碼為 update_one(filter,update,upsert=False),其中第一個參數(shù) filter為更新的條件,第二個參數(shù) update 為更新的內(nèi)容,第三個參數(shù) upsert 默認(rèn) False, 若為 True 則當(dāng)更新條件沒找到時會插入更新的內(nèi)容

 
 
 
 
  1. data3 = { 
  2.     'name': 'Xiaoming', 
  3.     'text': 'Goodbye World', 
  4.     'tags': [1, 2, 3] 
  5. update_condition = {'name' : 'Chenxi'}  
  6. collection.update_one(update_condition, {'$set' : data3}) 

6.2 更新多條數(shù)據(jù)

有了上面刪除和插入多條數(shù)據(jù)的認(rèn)識,就很好理解更新多條數(shù)據(jù)的邏輯了,同理也是更新符合條件的全部數(shù)據(jù)。

 
 
 
 
  1. data3 = { 
  2.     'name': 'Xiaoming', 
  3.     'text': 'Goodbye World', 
  4.     'tags': [1, 2, 3] 
  5. update_condition = {'text' : 'Hello World'}  
  6. collection.update_many(update_condition, {'$set' : data3}) 

七、查詢數(shù)據(jù)

7.1 查詢單條數(shù)據(jù)

匹配第一條滿足的條件的結(jié)果,這條結(jié)果以字典形式返回,若沒有查詢到,則返回 None

 
 
 
 
  1. find_result = collection.find_one({'text' : 'Hello World'}) 
  2. print(find_result) 

可以通過 projection 參數(shù)來指定需要查詢的字段:

 
 
 
 
  1. find_result = collection.find_one({'text' : 'Hello World'}, projection= {'_id':False, 'name':True, 'tags':False}) 
  2. print(find_result) 

7.2 查詢多條數(shù)據(jù)

返回滿足條件的所有結(jié)果,返回后需要通過迭代獲取每個查詢結(jié)果,每個結(jié)果類型為字典。和之前的增、刪、改不類似,查詢多條為 find()

 
 
 
 
  1. find_result = collection.find({'text' : 'Hello World'}) 
  2. for i in find_result: 
  3.     print(i) 

7.3 查詢且刪除

代碼為 find_one_and_delete(filter,projection=None,sort=None,session=None,**kwargs),其中 sort為元祖列表類型,當(dāng)查詢匹配到多條數(shù)據(jù)時,根據(jù)某個條件排序,函數(shù)返回時返回第一條數(shù)據(jù):

 
 
 
 
  1. find_condition = {'text' : 'Hello World'} 
  2. deleted_item = collection.find_one_and_delete(find_condition, sort= [('name', pymongo.DESCENDING)]) 
  3. print(deleted_item) 

查詢也可以通過 $ 限定查詢范圍,常用內(nèi)容如下:

img

八、計數(shù)

要統(tǒng)計查詢結(jié)果有多少條數(shù)據(jù),可以調(diào)用 count() 方法。具體操作如下:

 
 
 
 
  1. count = collection.find({'text' : 'Hello World'}).count() 
  2. print(count) 

九、排序

查詢中已經(jīng)看到 sort 可以作為參數(shù)發(fā)揮排序作用。實(shí)際上 sort 可以類似計數(shù)方法一樣直接跟在查詢的后面:

 
 
 
 
  1. results = collection.find({'text' : 'Hello World'}).sort('name', pymongo.ASCENDING) 
  2. print([result['name'] for result in results]) 

十、索引

10.1 創(chuàng)建索引

在插入數(shù)據(jù)時,已經(jīng)有一個 _id 索引了,但我們還可以自定義創(chuàng)建索引:

 
 
 
 
  1. collection.create_index('name', unique= True) 

10.2 獲取索引信息

可以利用 index_information 獲取索引介紹:

 
 
 
 
  1. index_info = collection.index_information() 
  2. print(index_info) 

10.3 刪除索引

 
 
 
 
  1. del_index = collection.drop_index(index_name) 

以上就是一些 Python 操作 MongoDB的基本用法,更多關(guān)于 PyMongo 的詳細(xì)用法,可以自行查閱官方文檔。


本文題目:Python操作MongoDB基礎(chǔ)講解
本文來源:http://www.dlmjj.cn/article/cceiged.html