1. 程式人生 > >在Python中使用pymongo操作mongodb

在Python中使用pymongo操作mongodb

最近在學習Python爬蟲,平常將爬取的資料都存入Excel表格中,但是當資料量大的時候存取和查、刪、改就不方便了,這時資料庫就是你很好的選擇了(其實我就是覺得使用Excel好low而已),在學習的過程中開始接觸mongodb這個資料庫,mongodb是一種非關係型資料庫,資料存取的形式與Python中的字典很相似,所以在Python中使用mongodb是一個不錯的選擇,廢話不多說,下面總結一下我最近學習的東西:

1、在Windows上安裝pymongo

這部分就不多說了,安裝還是挺簡單的,沒有出現像其他一些包安裝的問題(沒錯,我說的就是scipy,scrapy等包)

2、使用pymongo初始化資料庫

from pymongo import MongoClient

client = MongoClient()
#建立資料庫,兩種方式
db = client.peopleinfo     #方式一
db = client['peopleinfo']  #方式二

#建立資料表,兩種方式
col = db.person
col = db['person']

首先從pymongo中匯入MongoClient,如果mongodb是執行在本地電腦上的,則MongoClient()中不需要任何引數,如果是在遠端伺服器上執行的,則例項化時需要引數,引數就是IP和埠,有兩種形式,引數形式和URI形式如下:

#引數形式
client = MongoClient(host='遠端IP', port=27017) #埠號預設為27017是數值
#URI形式
client = MongoClient('mongodb://遠端IP:27017')

上面兩種建立資料庫的方式都是可以的,但是如果批量操作資料庫的時候,第二種方式的優勢就凸顯出來了,我們來看看下面的程式碼:

database_name = ['db1', 'db2', 'db3', 'db4',...]
for each in database_name:
   db = client[each]
   col = db.test
   ...

上面的程式碼將要建立的多個數據庫名稱存放在列表中,通過一個for迴圈就可以建立多個數據庫,併為每個資料庫建立名為test的資料表(在mongodb中其實應該叫集合collection),當然也可以進行其他的批量操作

3、插入

mongodb的插入操作使用的是insert()函式,插入的內容就是Python的字典,如下:

data = {'id':123, 'name':'Neil', 'age':80, 'sex':'male'}
col.insert(data)

執行程式碼,通過Robo這個mongodb的圖形互動介面來檢視,結果如下
這裡寫圖片描述
從圖片中可以看到,資料已經成功的插入到資料庫中,但是發現數據庫中的資料不是按照字典中的順序排的,mongodb中顯示是隨機的,但是不影響,還發現前面多了一個“_id”欄位,這個是mongodb自動新增的

4、更新

更新操作使用的是update_one(引數1, 引數2)或者update_many(引數1, 引數2),前者是更新一條資訊,後者是更新多條資訊,引數1和引數2都是字典且不能省略,引數1是查詢條件,引數2是更新內容程式碼如下:

#將第一個男性年齡改為20
col.update_one({'sex':'male'}, {'$set':{'age':20}})

#將所有男性年齡改為20
col.update_many({'sex':'male'},{'$set':{'age':20}})

5、查詢

mongodb實現查詢的功能的函式是:find(引數)、find_one(引數),引數為字典,顧名思義,find_one(引數)一次直返回一條資訊
引數也可以省略:

content = col.find()#返回集合col中的所有內容
content = col.find({'age':20})#查詢所有年齡為20的記錄資訊

6、刪除

刪除使用的方法同樣也是兩個:delete_one(引數),delete_many(引數),引數也都是字典,delete_one(引數)刪除一條符合條件的記錄,delete_many(引數)刪除所有符合條件的記錄

col.delete_one({'name':'Neil'})#刪除名字為Neil的記錄
col.delete_many({'age':20})#刪除所有年齡為20的記錄

7、總結