Python将PDF文件存入mongodb数据库中Gridfs,使用mongoengine来执行数据库插入pdf文件

有目标就不怕路远。年轻人.无论你现在身在何方.重要的是你将要向何处去。只有明确的目标才能助你成功。没有目标的航船.任何方向的风对他来说都是逆风。因此,再遥远的旅程,只要有目标.就不怕路远。没有目标,哪来的劲头?一车尔尼雷夫斯基

导读:本篇文章讲解 Python将PDF文件存入mongodb数据库中Gridfs,使用mongoengine来执行数据库插入pdf文件,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com,来源:原文

最近苦恼于如何将PDF文件存储进入数据库中,一开始决定将pdf存入mysql中,但找了很久的文档都找不到,都只是将pdf的路径写入进数据库中不是我想要的,其他写法普遍较为困难实现起来有点复杂,最终找到mongodb里面的GridFs这个用来规范存储pdf文件进入数据库
第一步先连接你的本地数据库地址

from  gridfs import  GridFS
from pymongo import MongoClient
client= MongoClient('mongodb://localhost:27017/')

第二部连接你的数据库,然后你要用Navicat里面的gridfs新建一个储存桶,再用GridFS的方法去连接你的组名,如果Gridfs里面没有你写的存储桶的名字他会自动创建包括数据库也是一样,如果没有会自动创建一个。

db = client['你的数据库']
gfs = GridFS(db,collection="你的组名")

在这里插入图片描述
第三部分,找到你的本地文件路径要绝对路径,然后写入

file = open("本地地址:test.pdf","rb")
#更改内容类型为PDF
args = {"content_type":"PDF"}
#输入文件名
gfs.put(file,filename="test.pdf",**args)
#关闭文件
file.close()

在这里插入图片描述
第四部分我们已经将我们的数据库写入进去那么我们现在就需要查询我们的数据库看看里面有没有我们想要的

pdf = gfs.find_one({"filename":"test.pdf"})
# 查询文件名
print(pdf.filename)
#查询文件类型
print(pdf.content_type)
#查询存入的id
print(pdf._id)

然后我们就可以查询到文件名、ID、文件类型
在这里插入图片描述
下面是完整代码

from  gridfs import  GridFS
from pymongo import MongoClient
client= MongoClient('mongodb://localhost:27017/')
db = client['你的数据库']
gfs = GridFS(db,collection="你的组名")
file = open("本地地址:test.pdf","rb")
args = {"content_type":"PDF"}
gfs.put(file,filename="test.pdf",**args)
file.close()
pdf = gfs.find_one({"filename":"test.pdf"})
# 查询文件名
print(pdf.filename)
#查询文件类型
print(pdf.content_type)
#查询存入的id
print(pdf._id)


使用mongoengine来执行数据库插入pdf文件

from mongoengine import connect
from mongoengine import Document, StringField, FileField
db = connect('你的数据库名', host='localhost', port=27017)

# 此处继承的是 mongoengine.Document
class test(Document):
    e1 = StringField()
    e2 = StringField()
    e3 = FileField()
table = test(e1='name', e2='dae')
url = open('文件地址.pdf', 'rb')
table.e3.put(e3, name='要插入的文件地址.pdf')
table.save()

在这里插入图片描述

但是这个插入有个问题就是由filefield文件自动创建了文件名字然后会出现储存库那边出现一个fs文件,但是这个fs文件是无法点击需要继续
出现这个方法的解决方式首先第一步就是将
table.e3.put(e3, name=‘要插入的文件地址.pdf’)这一段代码中插入gridfs默认的文件类型filename,还有更改文件的mime类型也就是contentType
因为GridFS使用两个集合(collection)存储文件
chunks, 用于存储文件内容的二进制数据;
files,用于存储文件的元数据。
而我们这次使用的是files所以是以下这种类型

{  
"_id" :
"filename" : 
"length" :
"chunkSize" :
"uploadDate" : 
"md5" : 
"contentType" : 
"meta" : 
} 

各种文件的mime类型
整理后我们得到

table.e3.put(e3, filename='要插入的文件地址.pdf',contentType='application/pdf')

在这里插入图片描述
然后我们就可以在Navicat中点击这个文件了
如果想要把刚才存入的文件从MongoDB里面提取出来可以参考这篇文章
Python操作mongo–GridFS把图片从mongo中提取出来到本地

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/134121.html

(0)
飞熊的头像飞熊bm

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!