mongoengine python
MongoDB ORM para Python? (4)
Estoy tratando de convertir de sqlalchemy (sqlite) a usar mongodb. Me gustaría la vertificación del esquema. Estoy mirando a mongokit, pero quiero algo similar a los mapeadores, para que se guarde de la propiedad del objeto, y no un dict.
Me gustaría un mapeador para poder usar objetos existentes sin modificarlos.
Al no estar satisfecho con MongoKit o MongoEngine, decidí escribir mi propia interfaz orientada a objetos para Python.
Delegué todas las consultas directamente a pymongo, por lo que la sintaxis de consulta es la misma. Principalmente, es solo un envoltorio de objetos alrededor de los resultados, con algunos otros ayudantes como la agrupación de conexiones de bases de datos, el soporte de DBRef y otros métodos de conveniencia para facilitarle la vida.
Se llama Minimongo y está disponible en github. ¡Feliz hacking!
Ejemplo:
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
Otra opción es MongoEngine . El ORM para MongoEngine es muy similar al ORM utilizado por Django.
Ejemplo (del tutorial):
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()
Quieres MongoKit . Es una capa de abstracción más alta que PyMongo . No estoy seguro si está usando Django, pero también django-mongokit integración django-mongokit .
Ejemplo de esta publicación de blog . Tenga en cuenta que las instancias de la computadora pueden hacer referencia directa a la marca / modelo una vez que la estructura está definida (por ejemplo, atari.make, c64.model, ...). No hay necesidad de diccionarios:
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'']},
]
Sé que llegué muy tarde a esta pregunta, pero soy el autor de Ming http://merciless.sourceforge.net , una validación de MongoDB inspirada en SQLAlchemy y motor de ORM. Es lo que usamos en SourceForge, y hay una presentación razonable disponible en http://www.slideshare.net/rick446/rapid-and-scalable-development-with-mongodb-pymongo-and-ming , así como un estudio de caso sobre migrando de SQLAlchemy a Ming http://www.slideshare.net/__amol__/from-sqlalchemy-to-ming-with-turbogears2 . Aquí hay un ejemplo de la capa ORM en Ming (del tutorial):
class WikiPage(MappedClass):
class __mongometa__:
session = session
name = ''wiki_page''
_id = FieldProperty(schema.ObjectId)
title = FieldProperty(str)
text = FieldProperty(str)
comments=RelationProperty(''WikiComment'')
Las consultas utilizan la sintaxis de consulta estándar de MongoDB (no los argumentos de palabra clave mágicos de Django ORM):
WikiComment.query.find(dict(page_id=wp._id))