使用 PyMongo GridFS 在 MongoDB 中保存和检索大型二进制数据
GridFS 是 MongoDB 中用于存储和检索大型二进制数据的一种机制。它将大文件拆分成多个块并保存在文档中,允许对文件进行高效的读写操作。
使用 PyMongo 可以很方便地实现 GridFS 的使用。下面演示如何在 MongoDB 中保存和检索大型二进制数据。
首先,需要导入 pymongo 和 bson.binary 模块:
import pymongo import bson.binary
接着,连接 MongoDB 数据库,选择要使用的数据库和集合:
client = pymongo.MongoClient('localhost', 27017) db = client['my_db'] collection = db['my_collection']
然后,初始化 GridFS 对象并上传文件:
fs = pymongo.gridfs.GridFS(db) with open('large_file.bin', 'rb') as f: data = f.read() file_id = fs.put(data, filename='large_file.bin')
在这个例子中,我们打开一个名为 'large_file.bin' 的二进制文件,读取其中的所有数据并将其保存在一个变量中。然后,使用 GridFS 的 put 方法将数据上传到 MongoDB 中,并指定文件名为 'large_file.bin'。
使用默认的配置,文件将被拆分成多个块进行保存,每个块的大小为 255KB。如果需要指定块大小,可以在初始化 GridFS 对象时传入 block_size 参数。
现在,我们可以根据文件 ID 检索文件:
found_file = fs.get(file_id)
这里,我们使用 GridFS 的 get 方法根据文件 ID 找到文件。得到的 found_file 对象可以像普通的文件对象一样进行读写操作。
如果需要将文件保存到本地磁盘上,可以使用以下代码:
with open('large_file_download.bin', 'wb') as f: f.write(found_file.read())
在这里,我们打开一个名为 'large_file_download.bin' 的二进制文件,在该文件中写入 found_file 对象中的所有数据。写入完成后,我们就得到了原始文件的副本。
以上就是使用 PyMongo GridFS 在 MongoDB 中保存和检索大型二进制数据的方法。如果需要使用字符串作为范例,可以将字符串转换成二进制数据再进行上传和检索。例如:
data = b"pidancode.com 皮蛋编程" file_id = fs.put(data, filename='my_string') found_file = fs.get(file_id) string_data = found_file.read().decode() print(string_data) # 输出 "pidancode.com 皮蛋编程"
相关文章