python連線MongoDB資料庫方法及增刪改查等操作小結。
阿新 • • 發佈:2018-11-09
Y9
建議安裝MongoDB視覺化工具“Robo 3T”,可以很直觀的看到對MongoDB操作後的資料。
1、‘Robo 3T’的安裝,網上很多途徑可下載,在此分享我使用的版本:
連結:https://pan.baidu.com/s/1EcjmUVkXz1GQeTXy2fMk9g
提取碼:o1zd
① 資料庫啟動mongoDB後,開啟Robo 3T連線mongodb資料庫
② 儲存,連線。就可出現以下類似介面:
相關教程推薦部落格:https://blog.csdn.net/junshangshui/article/details/79371316
2、安裝pymongo模組
在cmd管理員模式下,執行 pip install pymongo
3、用Pycharm連線MongoDB
① 匯入模組:from pymongo import MongoClient
② 連線MongoDB資料庫:db = MongoClient(‘192.168.47.128’,27017)
③ 新增資料庫:my_db = db.my_db
④ 建立檔案:my_infor = my_db.my_infor
4、增刪改查以及條件查詢等基礎操作:
# 向檔案中插入資料
user = [{'name':'jiesen','age':15,'sex':'男'},{'name':'jiesen','age':35,'sex':'男'},{'name':'jiesen' ,'age':23,'sex':'男'}]
# my_infor.insert(user)
'''
insert():可以實現單條或多條資料的插入
save():只能完成單條資料的插入,並且資料必須是字典結構
'''
# 查詢資料
res = my_infor.find({'name':'jiesen'})
# for item in res:
# print(item)
# 更新資料
# multi: 布林型別, 設定資料更新時是否一次性更新多條資料, 預設為False
# upsert: 設定資料更新時,如果資料不存在,是否將本次資料新增到檔案中,預設為False
my_infor. update({'name':'jiesen1'},{'$set':{'age':20,'sex':'woman'}},multi=True,upsert=True)
# 刪除資料
# delete_one(): 刪除資料中一條資料
# delete_many(): 一次性刪除多條滿足的資料
# my_infor.delete_many({'name':'jiesen'})
# mongodb條件查詢:
'''
> : $gt
< : $lt
>= : $gte
<= : $lte
$in:(m,n,) : 提取在指定內容中的資料
$all[n,m,...]: 查詢資料庫中某一條資料是否全部包含all中的資料, 如果'全部'包含則返回該條資料,否則不反悔
$push: 向已有資料來源中按照欄位進行資料的新增.基於'列表'
$pop: 將資料庫中對應資料的某一個欄位資料按照指定方式進行刪除. 其中 -1:從列表的起始位置開始刪除; 1: 從列表的最後位置開始刪除
$pull: 將對應資料中指定的資料分佈進行刪除(按值刪除)
$or : 或者指令, 該指令通常作為字典的鍵, 其對應的值是一個'列表'結構,列表中每一個元素之間是'並列'的關係.
"在字典中所有的鍵值對之間代表的是一種'並且'的關係."
.sort('age',1): 將查詢之後的結果按照指定的欄位進行排序, 1為升序,-1為降序
.skip(m).limit(n): 將查詢結果的取值顯示為,跳過m條資料,顯示n條資料. 即只顯示m+1~m+1+n的資料
'''
#例:
#查詢年齡在[5,25]之間的所有資料
res = my_infor.find({
'age':{'$gte':5,"$lte":25}
})
# for item in res:
# print(item)
#查詢年齡15以下或25以上,name是jiesen的資料
res1 = my_infor.find({
'$or':[
{'age':{'$gte':25}},
{'age':{'$lte':15}}
],
'name':'jiesen'
})
# $in: 提取在指定內容中的資料
res3 = my_infor.find({
'age':{'$in':(15,23)}
})
obj = {
'name':'ysh',
'sex':'男',
'age':77,
'photo':['img/1.jpg','img/2.jpg'],
'score':[12,15,17,90]
}
# my_infor.insert(obj)
res4 = my_infor.find({
'score':{'$all':[12,15,90]}
})
# $push: 向已有資料來源中按照欄位進行資料的新增.基於'列表'
# my_infor.update(
# {'name':'ysh'}, #指定資料的條件
# {'$push':{'score':[103,120]}}
# )
# $pop: 將資料庫中對應資料的某一個欄位資料按照指定方式進行刪除. 其中 -1:從列表的起始位置開始刪除; 1: 從列表的最後位置開始刪除
# $pull: 將對應資料中指定的資料分佈進行刪除(按值刪除)
my_infor.update(
{'name':'ysh'},
# {'$pop':{'score':1}},
{'$pull':{'score':90}}
)
#多路查詢
res5 = my_infor.find({
'score.0':{'$gt':10}
})
obj1 = {
'name':'YSH',
'son':[
{'name':'ete','age':17},
{'name':"ete1",'age':15}
]
}
# my_infor.insert(obj1)
res6 = my_infor.find({
'son.1.age':15
})
for item in res6:
print(item)
注意:以上註釋部分有的是為避免例子之間衝突,而註釋的執行語句。根據需要解除註釋。
個人小結,定有不足之處,歡迎指點。
謝謝~