成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Python 操作 MongoDB 基礎講解

開發 后端 MongoDB
MongoDB是一種面向文檔型的非關系型數據庫(NoSQL),非關系數據庫中是以鍵值對存儲,結構不固定,易存儲,減少時間和空間的開銷。

 MongoDB是一種面向文檔型的非關系型數據庫(NoSQL),非關系數據庫中是以鍵值對存儲,結構不固定,易存儲,減少時間和空間的開銷。

[[385197]]

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

本文默認已經安裝了MongoDB服務器,著重介紹Python操作MongoDB的庫PyMongo,在命令行中輸入如下內容安裝:

 

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

一、連接服務器

連接服務器需要提供一個地址和接口

 

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

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

 

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

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

 

  1. print(client.server_info())  

二、獲取數據庫

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

 

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

另外需要說明,MongoDB不需要提前創建好數據庫,而是直接使用,如果發現沒有則自動創建一個 testdb 的數據庫:

 

  1. db = client.testdb 

三、獲取集合

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

 

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

四、插入數據

下面的操作進行前默認已經通過代碼獲取到了 practice 集合:

 

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

4.1 插入單條數據

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

 

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

在MongoDB中,每條數據都有_id屬性來唯一標識。可以輸出返回的id確認數據情況:

 

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

4.2 插入多條數據

如果有多條數據,每條數據形式依然是字典,但需要組合成字典列表的形式后用 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]) 

五、刪除數據

5.1 刪除單條數據

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

 

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

5.2 刪除多條數據

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

 

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

六、更新數據

6.1 更新單條數據

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

 

  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 更新多條數據

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

 

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

七、查詢數據

7.1 查詢單條數據

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

 

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

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

 

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

7.2 查詢多條數據

返回滿足條件的所有結果,返回后需要通過迭代獲取每個查詢結果,每個結果類型為字典。和之前的增、刪、改不類似,查詢多條為 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為元祖列表類型,當查詢匹配到多條數據時,根據某個條件排序,函數返回時返回第一條數據:

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

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

 

 

img

 

八、計數

要統計查詢結果有多少條數據,可以調用 count() 方法。具體操作如下:

 

 

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

九、排序

查詢中已經看到 sort 可以作為參數發揮排序作用。實際上 sort 可以類似計數方法一樣直接跟在查詢的后面:

 

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

十、索引

10.1 創建索引

在插入數據時,已經有一個 _id 索引了,但我們還可以自定義創建索引:

 

  1. collection.create_index('name'uniqueTrue

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的基本用法,更多關于 PyMongo 的詳細用法,可以自行查閱官方文檔。

責任編輯:華軒 來源: 早起Python
相關推薦

2010-04-19 17:25:31

Unix操作系統

2010-04-19 16:47:40

Unix操作系統

2010-04-14 10:32:10

Unix操作系統

2013-11-21 09:10:27

MongoDB

2010-06-29 12:22:01

MGCP協議

2010-08-23 17:16:16

DHCP協議

2010-02-24 13:25:22

Python線程應用程

2010-06-08 13:32:19

TCP IP協議基礎

2010-06-28 14:51:25

FTP協議命令

2021-02-01 11:03:36

Python開發郵件

2010-05-05 17:07:47

AIX操作系統

2010-02-24 15:20:23

WCF Message

2010-07-20 17:07:22

Telnet服務器

2010-09-07 16:24:34

2009-12-28 14:12:45

Fedora GCJ

2010-04-20 10:27:57

什么是負載均衡

2011-07-04 10:55:10

EnyowebOS 3.0 S

2011-05-26 13:43:30

MongoDB

2009-12-21 11:22:37

Linux網絡操作命令

2023-01-26 23:59:24

Ansibleplaybook列表
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 欧美综合一区二区三区 | 精品无码久久久久久久动漫 | 操视频网站 | 久久精品福利视频 | 免费看黄色视屏 | 成人h免费观看视频 | 亚洲免费观看 | 日韩在线视频一区二区三区 | 99re在线视频| 视频一区二区三区四区五区 | 中文字幕在线精品 | 亚洲国产91 | 在线亚洲一区二区 | 天天玩天天干天天操 | 久草网址| 亚洲三级在线观看 | 99re国产视频 | 99色视频| 男女国产视频 | 三级在线视频 | 看一级黄色毛片 | 超碰91在线 | 国产免费一区二区三区最新6 | 国产精品揄拍一区二区 | 午夜精品福利视频 | 久久久久网站 | 琪琪午夜伦伦电影福利片 | 国产激情视频在线 | 午夜视频免费在线观看 | 日本超碰| 久久亚洲国产精品 | 国产天堂| 国产视频欧美 | 欧美精品日韩精品 | 伊人久久大香线 | 色妞av| 国产区在线免费观看 | 欧美在线视频一区 | 国产精品久久久久久吹潮 | 久久亚洲一区二区 | 国产偷录视频叫床高潮对白 |