MongoDB(4)- MongoDB与Python的交互

2022/7/1 2:21:17

本文主要是介绍MongoDB(4)- MongoDB与Python的交互,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

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"))

 



这篇关于MongoDB(4)- MongoDB与Python的交互的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程