如何在Flask中声明Mongo二进制对象

时间:2015-01-31 00:18:58

标签: mongodb flask pymongo bson

我正在构建一个烧瓶应用程序,我将在那里提供小图像。这些图像作为BinaryData存储在MongoDB中。在辅助函数中,我可以使用以下python行存储数据:

    a = {"file_name": f, "payload": Binary(article.read())}
    ARTICLES.insert(a)

我正在尝试构建一个包含图像的类。但是,我找不到正确的字段声明

class BinaryFile(mongo.Document):
    created_at = mongo.DateTimeField(default=datetime.datetime.now, required=True)
    file_name = mongo.StringField(max_length=255, required=True)
    payload = mongo.Binary()

产生此错误:

AttributeError: 'MongoEngine' object has no attribute 'Binary'

任何人都可以建议正确的方式来声明这个值,还是我完全偏离基础?此页面未提供将字段声明为二进制的方法:http://api.mongodb.org/python/current/api/bson/index.html

谢谢!

1 个答案:

答案 0 :(得分:0)

加布帮助我走上了正确的道路。

首先,我必须决定是使用标准二进制格式还是移动到GridFS,我选择坚持使用常规二进制格式。

我不明白的是,DateTimeField和StringField是由MongoEngine提供的。 Gabe的评论让我走了这条路,我找到了MongoEngine字段文档:http://docs.mongoengine.org/apireference.html#fields

我打电话给我并在此处收到错误:mongoengine.fields.ImproperlyConfigured: PIL library was not found这是通过执行

修复的
pip install Pillow

所以现在我有了

import datetime
from app import mongo
from flask import url_for
from bson.binary import Binary

class BinaryFile(mongo.Document):
    created_at = mongo.DateTimeField(default=datetime.datetime.now, required=True)
    file_name = mongo.StringField(max_length=255, required=True)
    payload = mongo.ImageField(required=False)

我正在接下来的错误!很快见到你!