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