用 pymongo 操作 MongoDB 數(shù)據(jù)庫(kù)
1.連接數(shù)據(jù)庫(kù)
MongoDB 數(shù)據(jù)庫(kù)下載地址
你可以使用以下2種方法
# -*- coding: utf-8 -*-
#導(dǎo)入pymongo中的MongoClient模塊
from pymongo import MongoClient
#第一種方法:使用host和port
client1 = MongoClient(host,port)
#這里的host是一個(gè)ip地址,可以是本機(jī)的127.0.0.1,也可以是一個(gè)網(wǎng)絡(luò)地址,也就是說可以不在安裝MongoDB的情況下使用MongoDB
#第二種方法:使用mongodb url
url = 'mongodb://host:port/'
#當(dāng)數(shù)據(jù)庫(kù)有密碼的時(shí)候
url = 'mongodb://username:password@host:port/'#默認(rèn)進(jìn)入admin
client2 = MongoClient(url)
#當(dāng)MongoDB里面有多個(gè)數(shù)據(jù)庫(kù),分別是test1,test2...,可以通過下面的url形式來進(jìn)行訪問特定的數(shù)據(jù)庫(kù)
url = 'mongodb://username:password@host/database_name'
2.在增、刪凤优、改、查操作之前
也就是說一個(gè)MongoDB連接可以有多個(gè)database蜈彼,同一個(gè)database下可以有多個(gè)collection筑辨,一個(gè)collection下可以有多個(gè)document
from pymongo import MongoClient
client = MongoClient(host='127.0.0.1',port=27017)
#這個(gè)時(shí)候我們已經(jīng)連接上了數(shù)據(jù)庫(kù),但是還不能直接進(jìn)行具體操作,需要在集合的水平進(jìn)行具體操作
#建立一個(gè)名為china數(shù)據(jù)庫(kù)
china = client['china']
#在user的基礎(chǔ)上建立一個(gè)名為shandong的集合
shandong = china['shandong']
#至此我們可以在集合的基礎(chǔ)上進(jìn)行增幸逆、刪棍辕、改暮现、查的操作了
為了整齊,此處將上面的代碼進(jìn)行整合
# -*- coding: utf-8 -*-
from pymongo import MongoClient
client = MongoClient(host='127.0.0.1',port=27017)
collection = client['china']['shandong']
下面增、刪楚昭、改栖袋、查的操作都是在上面 collection
這個(gè)對(duì)象的基礎(chǔ)上進(jìn)行操作
3.寫(增)操作
pymongo提供了 insert_one()
, insert_more()
兩個(gè)方法來進(jìn)行寫操作
#insert_one()接收一個(gè)字典對(duì)象collection.insert_one({'people_num':147000000})
#insert_many()接收一個(gè)字典列表
collection.insert_many([{'people_num':147000000},{'city_num':16}])
collection.insert_one({'people_num':147000000,'city_num':16,'location':"east"})
效果如下:
4.查操作
pymongo提供了 find_one()
, find()
兩個(gè)方法來進(jìn)行查操作 find_one
方法
#默認(rèn)獲取集合中的第一條
collection.find_one()
#按條件查詢,find_one()接收一個(gè)字典來進(jìn)行匹配
collection.find_one({'people_num':147000000})
#多條件查詢
collection.find_one({'people_num':147000000,'city_num':16})
find
方法
#獲取集合中所有數(shù)據(jù)
collection.find({})
#按條件查詢,find()接收一個(gè)字典來進(jìn)行匹配
collection.find({'people_num':147000000})
#=>返回一個(gè)pymongo內(nèi)置的Cursor對(duì)象,是可迭代的,可以使用循環(huán)輸出
#按規(guī)則輸出數(shù)據(jù)項(xiàng),為1的輸出抚太,為0的不輸出
collection.find({},{'_id':0,'city_num':1})
#==>含有city_num數(shù)據(jù)項(xiàng)的輸出city_num,沒有的輸出空字典
collection.find({},{'people_num':0,'city_num':1})
#這樣寫會(huì)報(bào)錯(cuò)塘幅,也就是find({},{query}),query中不能同時(shí)含有兩個(gè)數(shù)據(jù)項(xiàng)(_id除外)
#限制返回條數(shù) .limit(n)當(dāng)n大于原本的數(shù)據(jù)數(shù)量時(shí),返回原數(shù)據(jù)量尿贫,當(dāng)小于時(shí)电媳,返回n條
collection.find({}).limit(3)
#返回三條#使用正則查詢
collection.find({"location":{ "$regex":"e[a-z]+"}})
#=>匹配location的值是以e開頭后面有多個(gè)小寫字母的=>east
#更高級(jí)的查詢 使用修飾符
# $gt 匹配大于指定值的值
# $eq 匹配等于指定值的值
# $gte 匹配大于或等于指定值的值
# $in 匹配數(shù)組中指定的任何值
# $nin 不匹配數(shù)組中指定的任何值
# $lt 匹配小于指定值的值
# $lte 匹配小于或等于指定值的值
# $ne 匹配所有不等于指定值的值
# $and 用邏輯聯(lián)接查詢子句AND將返回兩個(gè)子句都匹配的所有文檔。
# $not 反轉(zhuǎn)查詢表達(dá)式的效果庆亡,并返回與查詢表達(dá)式不匹配的文檔匾乓。
# $nor 用邏輯聯(lián)接查詢子句NOR將返回兩個(gè)子句均不匹配的所有文檔。
# $or 用邏輯聯(lián)接查詢子句OR將返回符合任一子句條件的所有文檔又谋。
#更多修飾符請(qǐng)看 https://docs.mongodb.com/manual/reference/operator/query/
collection.find({"people_num":{"$eq":147000000}})
#匹配people_num的值等于147000000
5.改(更新)操作
pymongo提供了 update_one()
, update_many()
兩個(gè)方法來進(jìn)行查操作
#更新一條數(shù)據(jù)
collection.update_one({'people_num':147000000},{"$set": { "people_num": "12345"}})
#更新多條數(shù)據(jù)
collection.update_many({'city_num':16},{"$set": { "city_num": 100}})
6.刪操作
pymongo提供了 delete_one()
, delete_many()
兩個(gè)方法來進(jìn)行刪除操作拼缝,和查操作的使用方法一樣。