Python 操作GridFS

摘要:
importymongofcompymongoimportMongoClientfromgridfsimportGridFSclassGFS(对象):def__init__(self,file_db,file_table):self。file_db=file_dbself。file_ table=file_ TabledefcreateDB(self):#连接到数据库并创建文件数据库和数据表
importpymongo
from pymongo importMongoClient
from gridfs importGridFS
classGFS(object):
    def __init__(self, file_db,file_table):
        self.file_db =file_db
        self.file_table =file_table
 
    def createDB(self): #连接数据库,并创建文件数据库与数据表
        client = MongoClient('localhost',27017)
        db =client[self.file_db]
        file_table =db[self.file_table]
        return(db,file_table)
 
    def insertFile(self,db,filePath,query): #将文件存入数据表
        fs =GridFS(db,self.file_table)
        iffs.exists(query):
            print('已经存在该文件')
        else:
            with open(filePath,'rb') as fileObj:
                data =fileObj.read()
                ObjectId = fs.put(data,filename = filePath.split('/')[-1])
                print(ObjectId)
                fileObj.close()
            returnObjectId
 
    def getID(self,db,query): #通过文件属性获取文件ID,ID为文件删除、文件读取做准备
        fs=GridFS(db, self.file_table)
        ObjectId=fs.find_one(query)._id
        returnObjectId
 
    def getFile(self,db,id): #获取文件属性,并读出二进制数据至内存
        fs =GridFS(db, self.file_table)
        gf=fs.get(id)
        bdata=gf.read() #二进制数据
        attri={} #文件属性信息
        attri['chunk_size']=gf.chunk_size
        attri['length']=gf.length
        attri["upload_date"] =gf.upload_date
        attri["filename"] =gf.filename
        attri['md5']=gf.md5
        print(attri)
        return(bdata, attri)
 
    #def listFile(self,db): #列出所有文件名
    #fs = GridFS(db, self.file_table)
    #gf = fs.list()
 
    #def findFile(self,db,file_table): #列出所有文件二进制数据
    #fs = GridFS(db, table)
    #for file in fs.find():
    #bdata=file.read()
 
    def write_2_disk(self,bdata, attri): #将二进制数据存入磁盘
        name = "get_"+attri['filename']
        ifname:
            output = open(name, 'wb')
        output.write(bdata)
        output.close()
        print("fetch image ok!")
 
    def remove(self,db,id): #文件数据库中数据的删除
        fs =GridFS(db, self.file_table)        
        fs.delete(id) #只能是id
 
 
if __name__=='__main__':
    gfs=GFS('fileDB','fileTable')
    (file_db,fileTable) = gfs.createDB() #创建数据库与数据表
    filePath = 'C:/Users/Administrator/Desktop/02655.jpeg' #插入的文件
    query = {'filename': '02655.jpeg'}
    id=gfs.insertFile(file_db,filePath,query) #插入文件
    id=gfs.getID(file_db,query)
    (bdata,attri)=gfs.getFile(file_db,id) #查询并获取文件信息至内存
    gfs.write_2_disk(bdata,attri) #写入磁盘
    #gfs.remove(file_db,id) #删除数据库中文件

免责声明:文章转载自《Python 操作GridFS》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇jQuery Mobile 1.3.0发布idea打包jar的多种方式,用IDEA自带的打包形式,用IDEA自带的打包形式 用Maven插件maven-shade-plugin打包,用Maven插件maven-assembly-plugin打包下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

laravel框架使用生涯

手工安装laravel http://laravelacademy.org/resources-download 1、将下载的文件复制到虚拟主机目录 2、在Apache的配置文件配置一个虚拟主机【注意,需要指向 public目录下】 <VirtualHost *:80> DocumentRoot "C:phpStudyWWWlarav...

Python Linux系统管理之文件与文件路径管理

一、介绍 在 Linux 中,操作系统提供了很多的命令(例如:ls、cd),用于文件和目录管理。在 Python 中,有一个 os 模块,也提供了许多便利的方法来管理文件和目录。 二、os 模块 os:语义为操作系统。所以,os 模块提供的肯定是操作系统相关的功能了(与具体的平台无关)。 如果用 dir() 查看 os,会发现内容相当多。下面,只列出文件和...

python字典

概念 一种通过名字引用值的数据结构为映射,而字典是python中唯一内建的映射类型。字典由多个键与其对应的值构成,键/值也成为项。每个键值之间用冒号隔开,项之间用逗号隔开,整个字典是由一对大括号括起来。空字典不包括任何项。键可以是数字、字符串和元组,并且唯一,但值不唯一。 某些情况,字典比列表更加适用: 表示游戏棋盘的状态,每个键都是由坐标值组成的元...

Python selenium 延时的几种方法

解决网页加载缓慢的几种方法: 一、显性等待WebDriverWait,配合该类的until()和until_not()方法,就能够根据判断条件而进行灵活地等待 1 from selenium import webdriver 2 from selenium.webdriver.support.wait import WebDriverWait 3 4...

Python进阶 学习笔记(三)

(涉及内容:定制类) __str__和__repr__ 如果要把一个类的实例变成 str,就需要实现特殊方法__str__(): class Person(object): def __init__(self, name, gender): self.name = name self.gender = ge...

orcl 如何快速删除表中百万或千万数据

orcl 数据库表中数据达到上千万时,已经变的特别慢了,所以时不时需要清掉一部分数据。 bqh8表中目前有10000000条数据,需要保留19条数据,其余全部清除掉。 以下为个人方法: 1、首先把需要保留的数据备份到temp1临时表中。 create table temp1 as select * from bqh8 where id<20;sele...