在Turbogears中使用带有Ming ODM的GridFS

时间:2012-08-07 20:57:05

标签: python mongodb turbogears2 odm ming

Ming支持GridFS从0.3版本开始,到目前为止我已在几个Turbogears应用程序中使用它,但找不到任何有关如何使用GridFS的文档,

这是我到目前为止所做的,在我的模型store.py模块中:

#import statements

BookFile = fs.filesystem('books',DBSession.impl,)

class Book(MappedClass):
    """
    Book definition.
    """
    class __mongometa__:
        session = DBSession
        name = 'books'
        unique_indexes = [('title',),('author',),]

    _id = FieldProperty(s.ObjectId)
    title = FieldProperty(s.String)
    author = FieldProperty(s.String)
    isbn = FieldProperty(s.String)
    vendor = FieldProperty(s.String)
    _file = FieldProperty(s.ObjectId)

    def _get_file(self):
        return BookFile.m.find(dict(_id=self._file)).one()
    def _set_file(self, name, data):
        f = BookFile.m.put(name,data)
        self._file = f

    bookf = SynonymProperty(_get_file, _set_file)

正如您所看到的,fs.filesystem无法使用ODMSession(在这种情况下为ThreadLocalODMSession),因此我必须通过以下方式下载到基本的ming.SessionDBSession.impl

我担心的是,Turbogears一直在使用ThreadLocalODMSession来适应多线程环境,但我上面所做的是给GridFS Connection提供非线程安全的Session。

没关系?
我应该如何正确/安全地做到这一点? 任何帮助,将不胜感激, 谢谢:))

1 个答案:

答案 0 :(得分:1)

DBSession.impl应该没问题,因为ming.Session不会存储任何数据。