ICode9

精准搜索请尝试: 精确搜索
首页 > 数据库> 文章详细

MongoDB(4)- MongoDB与Python的交互

2022-06-30 14:03:33  阅读:241  来源: 互联网

标签:school name Python MongoDB db client GridFS import 交互


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

 

标签:school,name,Python,MongoDB,db,client,GridFS,import,交互
来源: https://www.cnblogs.com/gltou/p/16306106.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有