安裝
鏈接mongodb
from pymongo import MongoClient
my_client = MongoClient("127.0.0.1",27017)
mdb = my_client["stutent"] # 指定鏈接的庫名
print(mdb)
# Database(MongoClient(host=['127.0.0.1:27017'], document_class=dict, tz_aware=False, connect=True), 'stutent')
# connect=True 表示鏈接成功
# document_class=dict 查詢結果以字典的形式返回
數據的增刪改查
添加
# 添加單條數據
res = mdb.user.insert_one({"name":"boy"})
print(res.inserted_id) # 不是字符串
print(type(res.inserted_id)) # <class 'bson.objectid.ObjectId'>
# 添加多條數據
res = mdb.stutent.insert_many([{"name":"小胡"},{"name":"小花"}])
print(res.inserted_ids) # [ObjectId('5d2f247ee6390ef6741370a7'), ObjectId('5d2f247ee6390ef6741370a8')]
print(type(res.inserted_ids)) # <class 'list'>
查看
查找符合條件的第一條數據
res = mdb.stutent.find_one({"name":"小黑"})
res = mdb.stutent.find_one({"_id":ObjectId("5d2ed96e38887b85450ed6d8")})
查找全部數據
res = mdb.stutent.find({}) # 返回的是可迭代對象
print(list(res))
"""
for i in res:
print(i)
"""
"""
- 咱們經過find查詢到了全部數據
- 若是前端頁面須要用json數據進行渲染頁面
- 但_id並非字符串類型而是ObjectId類型,且沒法直接轉換成json
- 那麼咱們能夠經過下面這兩種方式將ObjectID轉換成json
"""
第一種方式,效率不高
import json
res_list = []
for user in res:
# 將列表中的_id值轉換成字符串
user["_id"] = str(user.get("_id"))
res_list.append(user)
# 將列表序列化
ret = json.dumps(res_list)
print(ret)
第二種方式,效率高
res = list(mdb.stutent.find({})) # 返回的是可迭代對象
import json
for index,user in enumerate(res):
res[index]["_id"] = str(user.get("_id"))
ret = json.dumps(res)
print(ret)
修改
# 修改符合條件全部數據的第一條
res = mdb.stutent.update_one({"name":"小花"},{"$set":{"name":"小二b"}})
# 修改符合條件的全部數據,沒有就添加一條
res = mdb.stutent.update_many({"name":"小花"},{"$set":{"name":"小二b","age":80}})
print(res) # {'n': 1, 'nModified': 1, 'ok': 1.0, 'updatedExisting': True}
批量操做
s = {"name":{"$regex":"胡"}} # 模糊匹配修改器
data = {
"$set":{"sex":"man","hobby":["抽菸","喝酒"]}
}
mdb.stutent.update_many(s,data)
用字典的方法對數據庫中的數據進行修改
# 返回因此數據中符合條件的第一條數據,而且是dict格式
res = mdb.stutent.find_one({"name":"小胡"})
# {'_id': ObjectId('5d2f246d7fb0bb7a411f350c'), 'name': '小胡', 'sex': 'man', 'hobby': ['抽菸', '喝酒']}
print(res)
res["sex"] = "male" # 在內存級別修改dict中的數據,全部字典的方法均可以使用
# 在經過update方法更新到數據庫
mdb.stutent.update_one({"name":"小胡"},{"$set":{"sex":res.get("sex")}})
# { "_id" : ObjectId("5d2f246d7fb0bb7a411f350c"), "name" : "小胡", "sex" : "male", "hobby" : [ "抽菸", "喝酒" ] }
刪除
# 只刪除符合條件的第一條數據
res = mdb.stutent.delete_one({"name":"大呲花"})
# 返回刪除數據的數量
print(res.deleted_count)
# 刪除符合條件的全部數據
res = mdb.stutent.delete_many({"name":"小二b"})
print(res.deleted_count)
其餘操做
import pymongo
"""
DESCENDING 從大到小排序
ASCENDING 從小到大排序
"""
# 返回的是可迭代對象
# sort排序
res = mdb.stutent.find().sort("age",pymongo.ASCENDING)
for i in res:
print(i)
# 選取
mdb.stu.find().limit(2)
# 跳過
mdb.stu.find().skip(2)
# 分頁
res = list(mdb.stu.find().sort("age",pymongo.ASCENDING).limit(2).skip(4))
print(res)
from bson import ObjectId
# 把字符串轉換成ObjectId對象進行查詢
res = mdb.user.find_one({"_id":ObjectId("5d2ed96e38887b85450ed6d8")})