栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

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

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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

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

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

第二部连接你的数据库,然后你要用Navicat里面的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中提取出来到本地

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1022792.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号