1.pymongo的安装与使用
1.1.pymongo安装
安装pymongo
pymongodb模块api官方文档:https://pymongo.readthedocs.io/en/stable/tutorial.html
pip install pymongo

1.2.pymongo使用
1.2.1.创建连接

1 from pymongo import MongoClient
2
3 client=MongoClient(host="localhost",port=27017,)
4 client.admin.authenticate("admin","123456")
报错:运行上述脚本报错

解决报错:
问题分析:上述的写法是针对pymongo老版本的写法,而我们pip安装的时候没有加版本号,因此下载安装的是最新版本的
项目设置选择pymongo最新版本 

换最新包的写法
1 from pymongo import MongoClient 2 3 client=MongoClient(host="localhost", 4 port=27017, 5 username="admin", 6 password="123456")
1.2.2.数据写入

- insert_one:写入单条记录
- insert_many:写入多条记录
1 from mongo_db import client
2
3 client.school.teacher.insert_one({"name":"李璐"})
4 client.school.teacher.insert_many([
5 {"name":"陈刚"},
6 {"name":"郭丽丽"}
7 ])

1.2.3.数据查询

- find:返回集合所有记录
- find_one:查询符合条件的记录,存在多个符合条件的记录,只返回一条
1 from mongo_db import client
2
3 try:
4 teachers = client.school.teacher.find({})
5 for one in teachers:
6 print(one["_id"],one["name"])
7 print("--------------------------")
8 teacher=client.school.teacher.find_one({"name":"李璐"})
9 print(teacher["_id"],teacher["name"])
10 except Exception as e:
11 print(e)

1.2.4.数据修改

- update_one:修改一条记录
- update_many:修改多条记录
- 表达式
- $set:添加修改记录属性,即筛选出来的结果,如果没有修改的属性,就执行添加属性操作;如果有就执行修改操作
- $push:数组属性添加元素
1 from mongo_db import client
2
3 try:
4 teachers = client.school.teacher.update_many({},{"$set":{"role":["班主任"]}})
5 teachers = client.school.teacher.update_one({"name":"李璐"},{"$set":{"sex":"女"}})
6 teachers = client.school.teacher.update_one({"name":"李璐"},{"$push":{"role":"年级主任"}})
7 except Exception as e:
8 print(e)


2.pymongo模块的删除操作
2.1.数据删除

- 删除记录mongodb用的是remove,pymongo用的是delete
- delete_one:删除一条记录
- delete_many:删除多条记录
类似删除操作:
- update_one:修改一条记录
- update_many:修改多条记录,无筛选条件,清空集合
- 表达式
- $unset:删除记录属性
- $pull:删除数组属性的元素
1 from mongo_db import client
2
3 try:
4 # client.school.teacher.delete_one({"name":"李璐"}) 删除李璐这条记录
5 # client.school.teacher.delete_many({}) 清空teacher集合
6 # client.school.student.update_one({"name":"lisi"},{"$unset":{"age":1}}) 删除student集合中name为李四的记录的age属性
7 client.school.student.update_one({"name":"李强"},{"$pull":{"city":"天津"}}) #删除student集合中name为李强、属性为city、city中数据为天津的属性值
8 except Exception as e:
9 print(e)
2.2.其他操作总结


1 from mongo_db import client
2
3 try:
4 #skip、limit分页查询
5 students_top2 = client.school.student.find({}).skip(0).limit(2)
6 for i in students_top2:
7 print(i["_id"],i["name"])
8
9 #查询不重复的学生姓名
10 students_name = client.school.student.distinct("name")
11 for i in students_name:
12 print(i)
13
14 #根据属性name排序,1为升序,-1为降序
15 students_sort = client.school.student.find({}).sort([("name",-1)])
16 for i in students_sort:
17 print(i)
18 except Exception as e:
19 print(e)
3.pymongo模块向MongDB中保存文件
3.1.GridFS了解


3.2.连接GridFS

MongoDB对文件操作用的是GridFS引擎,因此我们需要连接GridFS,对MongoDB进行操作;
创建client连接并确定逻辑库即db,作为参数传入GridFS方法中,告诉GridFS对象连接已经创建好,连接的逻辑库是school,并且操作的是school中的book集合
GridFS(db,collection=”book”)
- db:逻辑库
- collection:集合
3.3.保存文件

使用GridFS的对象的put方法将文件写入到mongodb中
1 from mongo_db import client
2 from gridfs import GridFS
3
4 db=client.school
5 gfs=GridFS(db,collection="book")
6
7 with open("D:/MongoDB/111.pdf","rb") as f:
8 args={"type":"PDF","keyword":"111"}
9 gfs.put(f,filename="111.pdf",**args)

4.查询GridFS中存储的文件
4.1.查询文件


1 import math
2
3 from mongo_db import client
4 from gridfs import GridFS
5
6 db=client.school
7 gfs=GridFS(db,collection="book")
8
9 book=gfs.find_one({"filename":"111.pdf"}) #使用find函数根据filename属性值找到book集合中该文件
10 print(book.filename) #打印文件的属性
11 print(book.type)
12 print(book.keyword)
13 print("%dM"%math.ceil(book.length/1024/1024)) #因为默认单位是字节,使用math方法转化成M
4.2.UTC转换成北京时间

UTC转换成北京时间
1 import datetime
2 import math
3 from mongo_db import client
4 from gridfs import GridFS
5
6 db=client.school
7 gfs=GridFS(db,collection="book")
8 books=gfs.find({"type":"PDF"})
9 for one in books:
10 #UTC转换成北京时间
11 uploadDate = one.uploadDate + datetime.timedelta(hours=8)
12 #格式化日期
13 uploadDate = uploadDate.strftime("%Y-%m-%d %H:%M:%S")
14 print(one._id,one.filename,uploadDate)
4.3.判断是否存储了文件
使用exists函数判断GridFS是否存储某个文件,存在返回True,不存在返回False;支持ID以及其他属性查找,要注意的是:
- 使用ID查找文件时,exists函数中要传入objectId对象
- 使用其他属性查找时,因为传入的参数是字典格式,因此要加**

from mongo_db import client
from gridfs import GridFS
from bson.objectid import ObjectId
db=client.school
gfs=GridFS(db,collection="book")
rs=gfs.exists(ObjectId("628cd523a4f1ae6cbbf1566a"))
print(rs)
rs=gfs.exists(**{"type":"PDF"})
print(rs)

5.读取/删除GridFS中存储的文件
5.1.读取文件

from mongo_db import client
from gridfs import GridFS
from bson.objectid import ObjectId
db=client.school
gfs=GridFS(db,collection="book")
document = gfs.get(ObjectId("628cd523a4f1ae6cbbf1566a"))
with open("D:/MongoDB/222.pdf","wb") as f:
f.write(document.read())

5.2.删除文件

1 from mongo_db import client
2 from gridfs import GridFS
3 from bson.objectid import ObjectId
4
5 db=client.school
6 gfs=GridFS(db,collection="book")
7 gfs.delete(ObjectId("628cd523a4f1ae6cbbf1566a"))

原创文章,作者:1402239773,如若转载,请注明出处:https://blog.ytso.com/tech/pnotes/272291.html