业务场景:
通过python查询mongo数据库中所存储的图片
条件:
查询上传日期大于等于2022-03-04的图片并保存到本地
度娘了好多文章,发现除了疯狂的套娃有用的信息很少,于是有了此文章,,理解不了的可以结合截图场景很简单但是尝试的过程很操蛋,希望大家避免被套娃。初学者,若有不足请指正,欢迎点赞留言交流!
上代码!!!
import gridfs
import pymongo
import time
import datetime
from 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.conn
class OperateGridFS(object):
'''
操作mongo的GridFS桶
根据时间查询图片数据,并存储到本地
'''
def __init__(self, inputDate):
#要过滤的时间范围
self.inuptDate = inputDate
def 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.filename
data = 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().image
fs = gridfs.GridFS(db, collection='fs')
mg2 = fs.find()
for grid_out in fs.find():
filename = grid_out.filename
upload_date = grid_out.upload_date
upload_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()