MongoDB的ORM的Python?
即时尝试从sqlalchemy(sqlite)转换为使用MongoDB。 我想架构的垂直。 即时通讯看着mongokit,但我想与类似的映射器的东西,这样它会从对象的属性保存,而不是一个字典。
我想要一个映射器,以便我可以使用现有的对象而不修改它们。
另一种select是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()
不满意MongoKit或MongoEngine,我决定编写自己的面向对象的Python接口。
我将所有查询直接委托给pymongo,因此查询语法相同。 大多数情况下,这只是对结果的一个对象包装,还有一些其他的帮助器,比如数据库连接池,DBRef支持和其他便利方法,让你的生活更轻松。
它被称为Minimongo ,它可以从github获得。 快乐的黑客!
例:
from minimongo import Model, MongoCollection class MyObject(Model): model = MongoCollection(database='test', collection='my_collection') m = MyObject() mx = 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
你想要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']}, ]
我知道我对这个问题确实晚了,但是我是明确的http://merciless.sourceforge.net ,一个SQLAlchemy启发的MongoDBvalidation和ORM引擎的作者。 这就是我们在SourceForge上使用的内容,在http://www.slideshare.net/rick446/rapid-and-scalable-development-with-mongodb-pymongo-and-上有一个合理的表示,还有一个案例研究从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的magic关键字参数):
WikiComment.query.find(dict(page_id=wp._id))