业务场景:
通过python查询mongo数据库中所存储的图片
条件:
查询上传日期大于等于2022-03-04的图片并保存到本地
度娘了好多文章,发现除了疯狂的套娃有用的信息很少,于是有了此文章,,理解不了的可以结合截图场景很简单但是尝试的过程很操蛋,希望大家避免被套娃。初学者,若有不足请指正,欢迎点赞留言交流!
上代码!!!
import gridfs
import pymongo
import time
import datetimefrom gridfs import *class DBConn(object):'''127.0.0.1 -> 你的monogo的服务器地址27017 -> 你的monogo的端口root -> 你的monogo的用户名password -> 你的monogo的密码'''server = 'mongodb://root:password@127.0.0.1:27017'def connect(self):#创建mongo连接self.conn = pymongo.MongoClient(self.server)def close(self):# 关闭mongo连接return self.conn.disconnect()def getConn(self):# 获取mongo连接return self.connclass OperateGridFS(object):'''操作mongo的GridFS桶根据时间查询图片数据,并存储到本地'''def __init__(self, inputDate):#要过滤的时间范围self.inuptDate = inputDatedef findGridByQuery(self):#获取数据库连接dbconn = DBConn()dbconn.connect()#获取你要操作的库,这里的image 就是你看到的相当于mysql有一个image库 要结合截图理解db = dbconn.getConn().image#获取你要操作的表,就是你看到的相当于mysql存在一个image库中,库中又有一张fs表 要结合截图理解fs = gridfs.GridFS(db, collection='fs')for grif_out in fs.find({"uploadDate": {"$gte": datetime.datetime.strptime(self.inuptDate, '%Y-%m-%d')}}):filename = grif_out.filenamedata = grif_out.read()#存储图片的位置outf = open(r'C:\Users\86185\Desktop\image\{}'.format(self.path, filename), 'wb')outf.write(data)outf.close()
#方法二 速度较慢不建议def gridFsTest(self):dbconn = DBConn()dbconn.connect()db = dbconn.getConn().imagefs = gridfs.GridFS(db, collection='fs')mg2 = fs.find()for grid_out in fs.find():filename = grid_out.filenameupload_date = grid_out.upload_dateupload_date = time.strptime(str(upload_date).split(" ")[0], '%Y-%m-%d')compare_date = time.strptime(self.inuptDate, '%Y-%m-%d')if upload_date >= compare_date:data = grid_out.read()outf = open(r'C:\Users\86185\Desktop\image\{}'.format(self.path, filename), 'wb')outf.write(data)outf.close()if __name__ == '__main__':demo = OperateGridFS('2022-03-04')demo.findGridByQuery()