当前位置:  开发笔记 > 编程语言 > 正文

MongoDB ORM for Python?

如何解决《MongoDBORMforPython?》经验,为你挑选了4个好方法。

我试图从sqlalchemy(sqlite)转换为使用mongodb.我想要架构顶点.我正在看mongokit,但我想要类似于mappers的东西,以便它可以从对象的属性中保存,而不是dict.

我想要一个映射器,以便我可以使用现有的对象而无需修改它们.



1> David Naraya..:

另一个选择是MongoEngine.MongoEngine的ORM与Django使用的ORM非常相似.

示例(来自教程):

class Post(Document):
    title = StringField(max_length=120, required=True)
    author = ReferenceField(User)

class TextPost(Post):
    content = StringField()

class ImagePost(Post):
    image_path = StringField()

class LinkPost(Post):
    link_url = StringField()


据我所知.您无法动态添加属性到mongoengine的文档.哪种方式可以带走mongodb的乐趣.
如果需要,您可以使用DictField添加任何类型的完全无模式数据.
对于那些希望获得可用于Python的MongoDB ORM的更全面概述的人,PyMongo“工具”页面列出了其中的很多内容,并定期维护:https://api.mongodb.com/python/current/tools.html

2> slacy..:

对MongoKit或MongoEngine不满意,我决定为Python编写自己的面向对象的接口.

我将所有查询直接委托给pymongo,因此查询语法也是一样的.大多数情况下,它只是结果的对象包装器,还有一些其他帮助程序,如数据库连接池,DBRef支持和其他便捷方法,可以让您的生活更轻松.

它被称为Minimongo,它可以从github获得.快乐的黑客!

例:

from minimongo import Model, MongoCollection 

class MyObject(Model): 
    model = MongoCollection(database='test', collection='my_collection')

m = MyObject()
m.x = 1
m.field = 'value'
m.other = {'list': True}
m.save()

x = MyObject({'x': 1, 'y': 2}).save()

objs = MyObject.find({'x': 1})
for o in objs: 
    print o



3> Ryan Cox..:

你想要MongoKit.它是比PyMongo更高的一层抽象.不确定你是否使用Django,但也有django-mongokit集成.

此博客文章的示例.请注意,一旦定义了结构,计算机的实例就可以直接引用make/model(例如atari.make,c64.model,...).不需要字典:

import datetime 
from mongokit import Document

class Computer(Document):

    structure = { 
      'make': unicode, 
      'model': unicode, 
      'purchase_date': datetime.datetime, 
      'cpu_ghz': float, 
    }

    validators = { 
      'cpu_ghz': lambda x: x > 0, 
      'make': lambda x: x.strip(), 
    }

    default_values = { 
      'purchase_date': datetime.datetime.utcnow, 
    }

    use_dot_notation = True

    indexes = [ 
      {'fields': ['make']}, 
    ]



4> Rick Copelan..:

我知道这个问题我已经迟到了,但我是Ming http://merciless.sourceforge.net的作者,这是一个SQLAlchemy启发的MongoDB验证和ORM引擎.这是我们在SourceForge上使用的内容,并且在http://www.slideshare.net/rick446/rapid-and-scalable-development-with-mongodb-pymongo-and-ming上有一个合理的演示文稿以及一个案例研究从SQLAlchemy迁移到Ming http://www.slideshare.net/__amol__/from-sqlalchemy-to-ming-with-turbogears2.这是Ming中的ORM层示例(来自教程):

class WikiPage(MappedClass):

    class __mongometa__:
        session = session
        name = 'wiki_page'

    _id = FieldProperty(schema.ObjectId)
    title = FieldProperty(str)
    text = FieldProperty(str)
    comments=RelationProperty('WikiComment')

查询使用标准的MongoDB查询语法(不是Django ORM的魔术关键字参数):

WikiComment.query.find(dict(page_id=wp._id))

推荐阅读
爱唱歌的郭少文_
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有