Python操作MongoDB
一、Python链接MongoDB
1、安装pymongo包
使用包管理器安装
pip3 insatll pymongo
2、连接MongoDB
首先需要导入pymongo包:
from pymongo import MongoClient
创建MongoClient对象:
from pymongo import MongoClient
#创建MongoClient对象,该对象用于连接MongoDB数据服务器
client = MongoClient('mongodb://admin:admin123456@localhost:27017/')
此时这个client对象就可以对MongoDB库进行操作
但是当文件多时,需要每个文件都创建一次client对象比较麻烦,所以我们可以将client作为一个全局变量放置在一个单独的文件中,专门用于链接数据库。
例如,我创建一个名为mongo_db.py的文件,那么在其他文件我想获得这个变量,只需要引入这个mongo_db.py文件即可。
二、对数据的具体操作
对数据的增删改查操作在MongoDB中有的方法Python中几乎都有,用法也是打点调用,但是在MongoDB中的方法命名使用是小驼峰,而Python中对应方法的名字单词间都以下划线分隔。例如:insertMany在Python中是:insert_many。
目前测试处不同的:Python操作MongoDB中没有insert方法,将remove方法替换成delete方法。
案例:
分页查询,查询前两个student记录:
from pymongo import MongoClient
client = MongoClient('mongodb://用户名:密码@localhost:27017/')
students=client.school.student.find().skip(1).limit(2)
skip代表从第一条记录开始,limit代表查询两条记录。如果你想输出对应信息,你可以以关键字形式访问:
for stu in students:
print(stu["_id"],stu["name"])
由于查询出是两条记录,使用的是find方法,所以返回列表。我们需要迭代进行访问。如果想输出id值,由于MongoDB的id是ObjectId类型,所以访问时,要加上_在前边访问。
三、GridFS
GridFS是MongoDB的一个子模块,它提供了一种规范,用于在MongoDB中存储和检索大型文件(如图像、音频、视频等)。
1、利用graidfs向MongoDB中存放文件
案例:
from mongo_db import client
from gridfs import GridFS
try:
db=client.school
gfs=GridFS(db,collection="book")
file=open("D:/Data/Linux就该这么学.pdf","rb")
args={"type":"PDF","keyword":"Linux"}
gfs.put(file,filename="Linux就该这么学.pdf",**args)
file.close()
except Exception as e:
print(e)
client是我们写好的链接MongoDB数据库的文件,可以直接使用。gfs=GridFS(db,collection="book")代表将数据集book返回给gfs,如果没有该数据集将创建。然后以二进制只读方式读取PDF文件。创建了一个args字典对象,内部有两个键值对。gfs.put(file,filename="Linux就该这么学.pdf",**args)是向book数据集中存放了file文件,还有filename,和**args,**代表可以解构的参数,也就是可以自动将键名作为MongoDB的键名。对应存储。
存放文件后,MongoDB数据库中将多出两个数据集。:
- chunks集合:用于存储文件内容的二进制数据。每个块由chunks集合中的一个文档表示,该文档包含块的唯一标识符、所属文件的标识符、块的序列号和块的数据等内容。
- files集合:用于存储文件的元数据。每个文件在files集合中都有一个对应的文档,该文档包含文件的唯一标识符、文件名、上传时间、文件大小、文件的MIME类型等元数据。
chunks存储的是文件的内容,而files集合存储的是一些文件信息。
2、获取文件中的信息
比如要获得文件的名字(filename),可以直接打点调用,例如:
book.filename
3、将MongoDB中的文件写入本地文件中
#读取文件内容
from bson import ObjectId
from mongo_db import client
from gridfs import GridFS
try:
db=client.school
gfs=GridFS(db,collection="book")
#根据id获得文件
doc=gfs.get(ObjectId("66fa395dbf3f57cbad976084"))
file=open("D:/Data/Linux宝典.pdf","wb")
file.write(doc.read())
file.close()
except Exception as e:
print(e)
doc=gfs.get(ObjectId("66fa395dbf3f57cbad976084"))就将获得的内容返回给了doc。在通过write写入本地文件