【mongodb】python操作mongodb
MongoDB-python操作mongodb
安装
pip install pymongo
连接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) """
1
2
3
4
5
6
|
""" - 我们通过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)
1
2
3
|
from bson import ObjectId # 把字符串转换成ObjectId对象进行查询 res = mdb.user.find_one({ "_id" :ObjectId( "5d2ed96e38887b85450ed6d8" )}) |