MongoDB學習【四】—pymongo操作mongodb數據庫


一、pymongodb的安裝

Python 要連接 MongoDB 需要 MongoDB 驅動,這里我們使用 PyMongo 驅動來連接。

pip安裝

pip 是一個通用的 Python 包管理工具,提供了對 Python 包的查找、下載、安裝、卸載的功能。

安裝 pymongo

python3 -m pip3 install pymongo
python3 -m pip3 install pymongo==3.5.1  # 指定版本安裝

二、pymongodb操作mongodb數據庫

1.連接數據庫

通過pymongo連接mongodb數據庫

import pymongo
client = pymongo.MongoClient("127.0.0.1", 27017)
dblist = client.database_names()  # 顯示服務器上的所有數據庫
# 新版本寫法
dblist = client.list_database_names()
​
db = client["practice"]  # 連接數據庫,獲取庫,如果庫名存在,則使用,不存在創建
# print(db)  # 數據庫操作對象

2.文檔的增加

集合中插入文檔使用 insert_one() 方法,該方法的第一參數是字典 name => value 對。

import pymongo
​
client = pymongo.MongoClient("127.0.0.1", 27017)
db = client["practice"]  # 連接數據庫,獲取庫,如果庫名存在,則使用,不存在創建
# print(db)  # 數據庫操作對象
"""增加"""
# 增加單條
mydict = {"name":"ryxiong","age":99}
res = db.stu.insert_one(mydict)
print(res.inserted_id)  # 5d2ed8f865d6b8f1c494ff78 ObjectId對象,不是字符串
# 增加多條
mylist = [{"name":"black"},{"name":"white"}]
res = db.stu.insert_many(mylist)
print(res.inserted_ids)  # [ObjectId('5d2fcc93c4f3d6ecb7178c87'), ObjectId('5d2fcc93c4f3d6ecb7178c88')]

3.查詢文檔

MongoDB 中使用了 find 和 find_one 方法來查詢集合中的數據,它類似於 SQL 中的 SELECT 語句。

查詢一條數據

我們可以使用 find_one() 方法來查詢集合中的一條數據。

import pymongo
from bson import ObjectId
​
client = pymongo.MongoClient("127.0.0.1", 27017)
db = client["practice"]  # 連接數據庫,獲取庫,如果庫名存在,則使用,不存在創建
​
res1 = db.stu.find_one({"name": "ryxiong"})
res2 = db.stu.find_one({"_id": ObjectId("5d2f0a052a8ee222edddb297")})  # 將字符串的ObjectID轉為對象后查詢

查詢集合中的所有數據或多條

find() 方法可以查詢集合中的所有數據,類似 SQL 中的 SELECT * 操作。

import pymongo
from bson import ObjectId
​
client = pymongo.MongoClient("127.0.0.1", 27017)
db = client["practice"]  # 連接數據庫,獲取庫,如果庫名存在,則使用,不存在創建
# 查詢多個
res3 = db.stu.find({})  # 查詢所有記錄
res4 = db.stu.find({"name": "ryxiong"})  # 查詢符合條件的所有,生成器

高級查詢

查詢的條件語句中,我們還可以使用修飾符。

以下實例用於讀取 name 字段中第一個字母 ASCII 值大於 "H" 的數據,大於的修飾符條件為 {"$gt": "H"}

import pymongo
​
client = pymongo.MongoClient("127.0.0.1", 27017)
db = client["practice"]  # 連接數據庫,獲取庫,如果庫名存在,則使用,不存在創建
​
myquery = { "name": { "$gt": "H" } }
res = mycol.find(myquery)

正則表達式查詢

我們還可以使用正則表達式作為修飾符。

正則表達式修飾符只用於搜索字符串的字段。

以下實例用於讀取 name 字段中第一個字母為 "R" 的數據,正則表達式修飾符條件為 {"$regex": "^R"}

import pymongo
​
client = pymongo.MongoClient("127.0.0.1", 27017)
db = client["practice"]  # 連接數據庫,獲取庫,如果庫名存在,則使用,不存在創建
​
myquery = { "name": { "$regex": "^R" } }
mydoc = mycol.find(myquery)
for x in mydoc:
    print(x)

查詢結果排序,跳過,截取條數

如果我們要對查詢結果設置指定條數的記錄可以使用 limit() 方法

對結果排序通過sort()方法,對結果忽略某些結果用skip

import pymongo
​
client = pymongo.MongoClient("127.0.0.1", 27017)
db = client["practice"]  # 連接數據庫,獲取庫,如果庫名存在,則使用,不存在創建
# 1.查詢結果的排序,跳過,和截取
sort_res = list(db.stu.find().sort("age", pymongo.DESCENDING))  # 查詢所有結果,並根據年齡的降序排序
skip_res = list(db.stu.find().skip(2))  # 查詢所有結果,並過濾掉前兩條
limit_res = list(db.stu.find().limit(2))  # 查詢所有結果,並截取前兩條顯示
# 2.分頁效果
pagination_res = list(db.stu.find().sort("age", pymongo.ASCENDING).limit(2).skip(2))

4.修改文檔

在 MongoDB 中使用 update_one() 方法修改文檔中的記錄。該方法第一個參數為查詢的條件,第二個參數為要修改的字段。

如果查找到的匹配數據多余一條,則只會修改第一條。

import pymongo
​
client = pymongo.MongoClient("127.0.0.1", 27017)
db = client["practice"]  # 連接數據庫,獲取庫,如果庫名存在,則使用,不存在創建
"""修改"""
# 方式一
# 查詢到直接更新設置值
res = db.stu.update_one({"name":"ryxiong"},{"$set":{"age":222}})
print(res.modified_count)
​
# 方式二.1
# 查到記錄,在字典中添加值
res = db.stu.find_one({"name":"ryxiong"})
res["gender"] = "male"
res["hobby"] = "photography"
res["name"] = "ryxiong1"
# 將值更新到記錄中去
res = db.stu.update_one({"name":"ryxiong"},{"$set":res})
print(res.modified_count)

5.刪除數據

刪除單挑

使用 delete_one() 方法來刪除一個文檔,該方法第一個參數為查詢對象,指定要刪除哪些數據

import pymongo
​
client = pymongo.MongoClient("127.0.0.1", 27017)
db = client["practice"] 
​
del_res1 = db.stu.delete_one({"name": "ryxiong"})  # 刪除滿足條件的結果中的第一條
print(del_res1.deleted_count)

刪除多條

使用 delete_many() 方法來刪除多個文檔,該方法第一個參數為查詢對象,指定要刪除哪些數據。

import pymongo
​
client = pymongo.MongoClient("127.0.0.1", 27017)
db = client["practice"] 
​
query = { "name": {"$regex": "^F"} }
del_res = db.stu.delete_many(myquery)  # 刪除滿足條件的多條
print(del_res.deleted_count)
​
# 刪除所有
del_res = db.stu.delete_many({})

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM