Какой API Python следует использовать с Mongo DB и Django
Я возвращаюсь туда и обратно, по которому API Python должен использоваться при взаимодействии с Mongo. Я сделал быстрый обзор ландшафта и определил трех ведущих кандидатов.
Если вы разрабатывали новый контент-тяжелый веб-сайт, используя django, какой API вы бы выбрали и почему?
MongoEngine выглядит так, как будто он был построен специально с учетом Django. PyMongo кажется тонкой оберткой вокруг Монго. Он обладает большой властью, хотя и теряет много абстракций, полученных с помощью django в качестве основы. Минг представляет собой интересную промежуточную точку между PyMongo и MongoEngine, хотя у меня не было возможности взять ее на тест-драйв.
Ответы
Ответ 1
Как говорит Майк, вы не можете избежать PyMongo - все остальные интерфейсы строятся поверх него. Эти другие интерфейсы, возможно, не нужны. ORM, такие как используемые в Django, полезны при работе с SQL, поскольку они уменьшают сложность создания SQL-запросов и схем и анализируют наборы результатов в объекты.
PyMongo, однако, уже имеет, что покрываемые запросы проходят через удобный и простой API, и результаты, полученные от MongoDB, уже являются объектами (ну, иными словами, в Python - с той же разницей) по определению. Если вы чувствуете, что вам действительно нужно украсить ваши Mongo-документы объектами Python, легко добавить манипулятор SON в PyMongo. Самое приятное в этом подходе заключается в том, что вы можете писать код непосредственно на PyMongo и позже добавлять дополнительные функции без необходимости вставлять новый API между вашим кодом и PyMongo.
Что осталось? Создание схемы и миграция несколько полезны, но почти так же просто сделаны ad-hoc - скорее всего, если вы планируете использовать MongoDB, вы все равно хотите вырваться из традиционной модели SQL-стиля. Кроме того, если бы был полностью Django-совместимый ORM MongoDB, вы могли бы получить некоторый пробег. Что-то меньшее, чем это, и вы, вероятно, будете создавать работу для себя.
Вы не пожалеете об использовании PyMongo напрямую.
Одним из последних опций, заслуживающих внимания, если вы заинтересованы в максимальной эффективности, является асинхронная версия PyMongo, здесь: http://github.com/fiorix/mongo-async-python-driver
Ответ 2
Я работал с Mongokit. Как и до сих пор.
Здесь запись в блоге, на которую я ссылался при интеграции с Django
Ответ 3
Как MongoEngine, так и Ming зависят от PyMongo - они просто добавляют некоторые полезные функции поверх него. Я бы рекомендовал по крайней мере начать с PyMongo напрямую - таким образом, если вы решите использовать один из других инструментов и столкнуться с проблемами, будет легко понять, что происходит "под капотом". Тем не менее, я очень предвзято;).
Ответ 4
Вы можете попробовать django-mongodb-engine попробовать. Это бэкэнд для Django-нереля, поэтому вы можете продолжать использовать модели Django и ORM. Это еще не так полно, как другие API:
http://www.allbuttonspressed.com/blog/django/2010/05/MongoDB-backend-for-Django-nonrel-released
Ответ 5
Я только что нашел "micromongo":
http://packages.python.org/micromongo/
Похоже, он добавляет достаточно полезного материала поверх пимонго, не мешая ему.
Ответ 6
Взгляните на djongo. Он работает, переведя SQL-запросы в запросы mongodb.
Вам не нужен django-nonrel для запуска.
Все встроенные модули Django contrib (например, admin, user, session) работают без каких-либо изменений.
MongoEngine требует переписывать модули Contrib и последний раз, когда я проверил, собственный модуль администрирования не работал на MongoEngine.
Существующие модели работают без перевода ORM.