使用 PyMongo GridFS 在 MongoDB 中保存和检索大型二进制数据

2023-04-15 00:00:00 检索 保存 二进制数

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 皮蛋编程"

相关文章