2010-04-29 10 views
46

Sto andando avanti e indietro su quale API Python utilizzare quando si interagisce con Mongo. Ho fatto una breve panoramica del paesaggio e ho identificato tre principali candidati.Quale API Python dovrebbe essere utilizzata con Mongo DB e Django

Se stavate progettando un nuovo sito web di contenuti pesanti utilizzando il framework django, quello API sceglieresti e perché?

MongoEngine sembra ideato appositamente per Django. PyMongo sembra essere un involucro sottile attorno a Mongo. Ha un sacco di potere, anche se perde molte delle astrazioni ottenute usando il django come framework. Ming rappresenta un'interessante via di mezzo tra PyMongo e MongoEngine, anche se non ho avuto l'opportunità di prenderlo per un giro di prova.

risposta

55

Come dice Mike, non è possibile evitare PyMongo - tutte le altre interfacce di costruire su di esso. Queste altre interfacce sono probabilmente superflue. Gli ORM come quelli utilizzati in Django sono utili quando si ha a che fare con SQL perché attenuano la complessità della creazione di query e schemi SQL e analizzano i set di risultati in oggetti.

PyMongo tuttavia ha già che le query coperte passano attraverso un'API conveniente e semplice ei risultati provenienti da MongoDB sono già oggetti (beh, dicts in Python - stessa differenza) per definizione. Se ritieni di aver davvero bisogno di decorare i tuoi documenti Mongo con oggetti Python, è facile aggiungere un manipolatore SON a PyMongo. La cosa bella di questo approccio è che puoi scrivere il codice direttamente su PyMongo e inserire in seguito funzionalità aggiuntive senza dover inserire una nuova API tra il tuo codice e PyMongo.

Cosa rimane? La creazione e la migrazione degli schemi sono in qualche modo utili, ma sono quasi altrettanto fatti ad-hoc - è probabile che se si sta prendendo in considerazione l'utilizzo di MongoDB si desideri comunque abbandonare il tradizionale modello in stile SQL. Inoltre, se ci fosse un ORM MongoDB completamente compatibile con Django, potresti ottenere un po 'di miglia da esso. Qualunque cosa in meno e probabilmente creerai lavoro per te stesso.

Non ti pentirai di usare PyMongo direttamente.

Un ultima opzione vale la pena guardare, se siete interessati a massima efficienza è la versione asincrona di PyMongo, qui: http://github.com/fiorix/mongo-async-python-driver

+2

Hai qualche esperienza personale con il driver asincrono (twistato)? Voglio usare MongoDB in un'app Twisted e l'ho trovato, ma la documentazione PyMongo afferma che [http://api.mongodb.org/python/current/faq.html?highlight=twisted#how-can-i-use -pymongo-with-an-asynchronous-socket-library-like-twisted] (_ questo progetto è attualmente meno stabile di PyMongo_). Questo potrebbe essere solo un disclaimer standard su un progetto open source di terze parti, ma potrebbe anche essere vero ... Ecco perché sto cercando commenti di prima mano su questa libreria ... –

+1

Autore del driver asincrono qui. È dichiarato meno stabile perché non è aggiornato con PyMongo, che è gestito da MongoDB (la stessa azienda). Ho scritto il driver asincrono molto tempo fa usando la [documentazione ufficiale] (http://docs.mongodb.org/meta-driver/latest/legacy/mongodb-wire-protocol/), e il driver si è evoluto molto da molti contributori , anche da parte di persone che lavorano per MongoDB. È infatti stabile e adatto alla produzione. – fiorix

6

Sia MongoEngine che Ming dipendono da PyMongo - hanno appena aggiunto alcune funzionalità. Suggerirei di avviare w/PyMongo direttamente - in questo modo se decidi di utilizzare uno degli altri strumenti e ti imbatti in problemi sarà facile capire cosa sta succedendo "sotto il cofano". Detto questo, sono molto prevenuto;).

11

Ho lavorato con Mongokit. Mi piace così tanto.

Ecco un blog post I referenced when integrating with Django

+0

Grazie per aver menzionato Mongokit, Harold. Non ne ho sentito parlare e lo guarderò con interesse. – Thomas

+0

+1 per MongoKit, l'autore è molto raggiungibile e ha migliorato notevolmente le prestazioni a grande richiesta. –

0

Il Mongodb documentation ufficiale parla di djongo. Funziona traducendo le query SQL in query mongodb.

Non hai bisogno di django-nonrel per eseguirlo.

Tutti i moduli di contributo Django nativi (ad esempio, admin, utente, sessione) funzionano senza alcuna modifica.

MongoEngine richiede la riscrittura di moduli contrib e l'ultima volta che ho controllato, il modulo di amministrazione nativo non è stato eseguito su MongoEngine.

I modelli esistenti funzionano anche senza traduzione ORM.

Problemi correlati