MongoDB ORM для Python? [закрытый]
im пытается преобразовать из sqlalchemy (sqlite) в использование mongodb. я бы vertification схемы. я смотрю на mongokit, но я хочу что-то похожее на картографы, чтобы это спасло от свойства объекта, а не дикт.
Я хотел бы картограф, чтобы я мог использовать существующие объекты без их изменения.
4 ответов
другой вариант:MongoEngine. ORM для MongoEngine очень похож на ORM, используемый Django.
пример (из учебника):
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()
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
вы хотите MongoKit. Это один слой абстракции выше, чем PyMongo. Не уверен, что вы используете Django, но есть также Джанго-mongokit интеграция.
пример блоге. Обратите внимание, что экземпляры компьютера могут ссылаться на make/model непосредственно после определения структуры ( например, atari.Марка, c64.модель. ,.. ). Нет необходимости в словарях:
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']},
]
Я знаю, что я действительно опаздываю на этот вопрос, но я автор Ming http://merciless.sourceforge.net, проверка MongoDB на основе SQLAlchemy и движок 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. Вот пример слоя ORM в Ming (из учебника):
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))