MongoEngine - 文件系统



在 MongoDB 中,大于 16 MB 的文件按照 GridFS 规范存储。一个文件被分成多个块,每个块的默认大小为 255KB。大块可能大到所需的大小。GridFS 使用两个集合,一个用于块,另一个用于元数据。

如果希望访问文件而无需将其全部载入内存,可以使用 GridFS 来存储任何文件。

MongoEngine API 通过FileField对象支持 GridFS。通过此对象,可以插入和检索数据。FileField 对象的put()方法有助于将文件作为文档的一部分进行编写。

from mongoengine import *
con=connect('newdb')

class lang (Document):
   name=StringField()
   developer=StringField()
   logo=FileField()

l1=lang()
l1.name='Python'
l1.developer='Van Rossum'
f=open('pylogo.png','rb')
l1.logo.put(f,content_type='image/png')
l1.save()

可以使用 Python 的文件对象通过 read() 方法来检索 FileField 内容。

logo = l1.logo.read()

还有一个delete()方法用于删除存储的文件。

l1 = lang.objects(name='Python').first()
l1.logo.delete()
l1.save()

请注意,FileField 只存储一个单独 GridFS 集合中的文件 ID。因此,delete() 方法不会实际删除文件。

replace()方法有助于用另一个文件替换文件引用。

l1 = lang.objects(name='Python').first()
f=open('newlogo.png','rb')
l1.logo.replace(f,content_type='image/png')
l1.save()
广告