Python 要鏈接 MongoDB 須要 MongoDB 驅動,這裏咱們使用 PyMongo 驅動來鏈接。python
pip 是一個通用的 Python 包管理工具,提供了對 Python 包的查找、下載、安裝、卸載的功能。正則表達式
安裝 pymongomongodb
python3 -m pip3 install pymongo python3 -m pip3 install pymongo==3.5.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) # 數據庫操做對象
集合中插入文檔使用 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')]
MongoDB 中使用了 find 和 find_one 方法來查詢集合中的數據,它相似於 SQL 中的 SELECT 語句。工具
咱們能夠使用 find_one() 方法來查詢集合中的一條數據。spa
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 * 操做。3d
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"}) # 查詢符合條件的全部,生成器
查詢的條件語句中,咱們還能夠使用修飾符。code
如下實例用於讀取 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))
在 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)
使用 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({})