【问题标题】:How to declare a Mongo Binary Object in Flask如何在 Flask 中声明 Mongo 二进制对象
【发布时间】:2015-03-30 13:41:03
【问题描述】:

我正在构建一个烧瓶应用程序,我将在其中提供小图像。这些图像作为 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

谢谢!

【问题讨论】:

标签: mongodb flask pymongo bson


【解决方案1】:

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

首先,我必须决定是使用标准二进制格式还是迁移到 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)

我正在处理下一个错误!好久不见!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-06-13
    • 2012-02-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-01
    • 2013-07-20
    相关资源
    最近更新 更多