web-dev-qa-db-fra.com

Quelle API Python doit être utilisée avec Mongodb et Django

Je me suis souvent demandé quelle API Python utiliser pour interagir avec Mongo. J'ai fait une rapide étude du paysage et identifié trois candidats principaux.

Si vous conceviez un nouveau site Web contenant beaucoup de contenu en utilisant le framework Django , quelle API choisiriez-vous et pourquoi? 

MongoEngine semble avoir été construit spécialement pour Django. PyMongo semble être une mince enveloppe autour de Mongo. Il a beaucoup de pouvoir, même s'il perd beaucoup des abstractions acquises en utilisant Django comme framework. Ming représente un compromis intéressant entre PyMongo et MongoEngine, bien que je n’aie pas encore eu l’occasion de le tester.

47
Thomas

Comme le dit Mike, vous ne pouvez pas éviter PyMongo - toutes les autres interfaces sont construites dessus. Ces autres interfaces sont sans doute inutiles. Les ORM tels que ceux utilisés dans Django sont utiles pour le traitement de SQL car ils atténuent la complexité de la création de requêtes et de schémas SQL et de l'analyse de jeux de résultats en objets.

PyMongo a cependant déjà ce problème couvert - les requêtes passent par une API simple et pratique et les résultats provenant de MongoDB sont déjà des objets (enfin, dict en Python - même différence) par définition. Si vous estimez que vous devez réellement décorer vos documents Mongo avec des objets Python, il est facile d’ajouter un manipulateur SON à PyMongo. La bonne chose à propos de cette approche est que vous pouvez écrire du code directement sur PyMongo, et insérer des fonctionnalités supplémentaires ultérieurement sans avoir à insérer une nouvelle API entre votre code et PyMongo.

Ce qui reste? La création et la migration de schéma sont quelque peu utiles, mais sont presque aussi simples que jamais. Si vous envisagez d'utiliser MongoDB, vous souhaiterez quand même sortir du modèle traditionnel de style SQL. De plus, s’il existait un ORM MongoDB entièrement compatible avec Django, vous pourriez en tirer un bénéfice considérable. Rien de moins que cela et vous créerez probablement du travail pour vous-même.

Vous ne regretterez pas d'utiliser PyMongo directement.

Une dernière option à surveiller si vous êtes intéressé par une efficacité maximale est la version asynchrone de PyMongo, ici: http://github.com/fiorix/mongo-async-python-driver

56
drg

Je travaille avec Mongokit . Je l'aime jusqu'à présent.

Voici un article de blog auquel j'ai fait référence lors de l'intégration à Django

11
Harold

MongoEngine et Ming dépendent tous deux de PyMongo - ils viennent d’ajouter des fonctionnalités Nice. Je recommanderais au moins de démarrer directement avec PyMongo - de cette façon, si vous décidez d'utiliser l'un des autres outils et que vous rencontrez des problèmes, il sera facile de comprendre ce qui se passe "sous le capot". Cela dit, je suis très partial;).

6
mdirolf

Vous pourriez essayer Django-mongodb-engine. C'est un backend pour Django-nonrel, vous pouvez donc continuer à utiliser les modèles et ORM de Django. Ce n'est pas encore aussi complet que les autres API: http://www.allbuttonspressed.com/blog/Django/2010/05/MongoDB-backend-for-Django-nonrel-released

5
Waldemar Kornewald

Je viens de trouver 'micromongo':

http://packages.python.org/micromongo/

On dirait que cela ajoute juste assez de choses utiles sur le pymongo sans gêner.

2
keybits

Le document officiel Mongodb parle de djongo . Cela fonctionne en traduisant les requêtes SQL en requêtes mongodb. 

Vous n'avez pas besoin de Django-nonrel pour l'exécuter.

Tous les modules natifs de Django contrib (par exemple, admin, utilisateur, session) fonctionnent sans aucune modification. 

MongoEngine nécessite la réécriture des modules contrib et la dernière fois que j’ai vérifié, le module d’administration natif ne s’exécutait pas sur MongoEngine. 

Vos modèles existants fonctionnent également sans traduction ORM.

0
nesdis