Флакон и Монго

Думая о веб-сервисе, полностью построенном на вершине MongoDB, в то время как я довольно удобен с PyMongo, я хотел бы знать, есть ли у вас какие-либо положительные или отрицательные переживания/истории об одном из этих ODM: MongoKit, MongoEngine и MongoAlchemy, причем последний имеет специальный флакон "Колба-монгоалхимия".

Ответы

Ответ 1

У меня нет реального опыта или истории, но я играл как с MongoKit, так и с MongoAlchemy, и я лично решил попробовать MongoAlchemy, потому что мне нравится синтаксис немного лучше (вероятно, из-за моего наследия Django).


MongoKit

class BlogPost(Document):
    structure = {
                'title':unicode,
                'body':unicode,
                'author':unicode,
                'date_creation':datetime.datetime,
                'rank':int
                }


MongoAlchemy

class BloodDonor(Document):
    first_name = StringField()
    last_name = StringField()
    age = IntField(min_value=0)
    gender = EnumField(StringField(), 'male', 'female')
    blood_type = EnumField(StringField(), 'O+','A+','B+','AB+',)


Оба помогут вам проверить ваши данные, позволят вам навязывать что-то вроде схемы (только на уровне приложения) и сэкономит вам некоторую типизацию (в частности, скобки).

MongoKit более совершенен. Я выбрал MongoAlchemy, потому что я не хотел набирать structure = {} все время, и указание вашего db и коллекции с помощью con.test.example.BlogPost() просто было ошибочным (хотя вам этого не нужно).

Попробуйте оба варианта и выберите тот, который лучше работает для вас.

Как вы уже упоминали, существует расширение Flask-MongoAlchemy, которое отлично работает. Если вы хотите использовать MongoKit, отличная документация Flask поможет вам в кратчайшие сроки: http://flask.pocoo.org/docs/patterns/mongokit/

Самое замечательное в том, что вы можете просто попробовать, если вам это не нравится, вы можете переключиться на другой или отказаться от pymongo, не изменяя ничего в базе данных.

Ответ 2

Я использую MongoEngine с флягой без проблем. Мы написали (собрали ресурсы), которые включают поддержку wtform и поддержку флагов-отладчиков:

https://github.com/MongoEngine/flask-mongoengine/