2010-04-29 11 views
46

Przechodzę do przodu i do tyłu, nad którym Python API używać podczas interakcji z Mongo. Zrobiłem szybką ankietę dotyczącą krajobrazu i zidentyfikowałem trzech głównych kandydatów.Które API Pythona powinno być używane z Mongo DB i Django

Jeśli zostały zaprojektowanie nowej strony zawartości ciężkich pomocą django ramy, co API byś wybrał i dlaczego?

MongoEngine wygląda tak, jakby był zbudowany specjalnie z myślą o Django. PyMongo wydaje się być cienkim opakowaniem wokół Mongo. Ma dużą moc, ale traci wiele abstrakcji uzyskanych dzięki użyciu django jako frameworka. Ming stanowi interesujący środek między PyMongo i MongoEngine, choć nie miałem okazji wziąć go na jazdę próbną.

Odpowiedz

55

Jak mówi Mike, nie można uniknąć PyMongo - wszystkie pozostałe interfejsy zbudować na nim. Te inne interfejsy są prawdopodobnie niepotrzebne. ORMy takie jak te używane w Django są użyteczne przy pracy z SQL, ponieważ łagodzą złożoność tworzenia zapytań SQL i schematów oraz parsowania zestawów wyników do obiektów.

PyMongo jednak już to obejmuje - zapytania przechodzą przez wygodny i prosty interfejs API, a wyniki pochodzące z MongoDB już są obiektami (no, dyktuje w Pythonie - ta sama różnica) z definicji. Jeśli uważasz, że naprawdę potrzebujesz udekorować swoje dokumenty Mongo obiektami Python, łatwo jest dodać manipulator SON do PyMongo. Zaletą tego podejścia jest to, że możesz pisać kod bezpośrednio na PyMongo, a później przesuwać dodatkowe funkcje bez konieczności wstawiania nowego interfejsu API między kodem a PyMongo.

Co zostało? Tworzenie schematów i migracja są w pewnym sensie użyteczne, ale są prawie tak proste, jak robią to ad-hoc - są szanse, że jeśli rozważasz użycie MongoDB, chcesz zrezygnować z tradycyjnego modelu w stylu SQL. Ponadto, gdyby istniała w pełni zgodna z Django aplikacja MongoDB ORM, można uzyskać z niej więcej kilometrów. Coś mniej niż to i prawdopodobnie będziesz tworzyć pracę dla siebie.

Nie będziesz żałować używania PyMongo bezpośrednio.

ostatnia opcja warte oglądania, jeśli jesteś zainteresowany w szczytowej wydajności jest asynchroniczna wersja PyMongo tutaj: http://github.com/fiorix/mongo-async-python-driver

+2

Czy masz osobiste doświadczenia ze sterownikiem asynchronicznym? Chcę użyć MongoDB w Twisted aplikacji i natknąłem się na niego, ale dokumentacja PyMongo stwierdza, że ​​[http://api.mongodb.org/python/current/faq.html?highlight=twisted#how-can-i-use -pymongo-z-asynchronicznym-socket-like-like-twisted] (_ ten projekt jest obecnie mniej stabilny niż PyMongo_). Może to być standardowe zastrzeżenie dotyczące projektu Open Source innej firmy, ale może być również prawdą ... Dlatego szukam komentarzy z pierwszej ręki na temat tej biblioteki ... –

+1

Autor sterownika asynchronicznego tutaj. Stwierdzono, że jest mniej stabilny, ponieważ nie jest aktualny w PyMongo, który jest obsługiwany przez MongoDB (ta sama firma). Napisałem już sterownik async dawno temu przy użyciu [oficjalnej dokumentacji] (http://docs.mongodb.org/meta-driver/latest/legacy/mongodb-wire-protocol/), a sterownik wiele ewoluował przez wielu autorów , w tym od osób, które pracują dla MongoDB. Jest stabilny i nadaje się do produkcji. – fiorix

6

Zarówno MongoEngine, jak i Ming zależą od PyMongo - po prostu umieszczają na nim ładną funkcjonalność. Polecam przynajmniej rozpoczęcie w/PyMongo bezpośrednio - w ten sposób, jeśli zdecydujesz się użyć jednego z innych narzędzi i napotkasz problemy, łatwo będzie zrozumieć, co dzieje się "pod maską". Powiedział, że jestem bardzo stronniczy;).

0

Oficjalny Mongodb documentation mówi o djongo. Działa poprzez tłumaczenie zapytań SQL na zapytania mongodb.

Nie potrzebujesz django-nonrel, aby go uruchomić.

Wszystkie natywne moduły Django contrib (np. Admin, użytkownik, sesja) działają bez żadnych modyfikacji.

MongoEngine wymaga przepisania modułów contrib i ostatnio sprawdziłem, że natywny moduł administracyjny nie działał na MongoEngine.

Twoje istniejące modele działają również bez tłumaczenia ORM.

Powiązane problemy