MongoDB ORM для Python? [закрытый]
Я пытаюсь конвертировать из sqlalchemy (sqlite) в использование mongodb. я хотел бы проверить схему. я смотрю на mongokit, но я хочу что-то похожее на mappers, чтобы оно сохраняло свойство объекта, а не дикт.
Я хотел бы маппер, так что я могу использовать существующие объекты, не изменяя их.
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.сделать, С64.модель. ,.. ). Нет необходимости в словарях:
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))
Comments