Oceniam i patrzę na użycie CherryPy dla projektu, który jest w zasadzie interfejsem JavaScript po stronie klienta (przeglądarki), który komunikuje się z usługą internetową Python na zapleczu. Tak więc naprawdę potrzebuję czegoś szybkiego i lekkiego na zapleczu, które mogę wdrożyć za pomocą Pythona, który następnie komunikuje się z bazą danych PostgreSQL za pośrednictwem ORM (JSON do przeglądarki).
Patrzę też na Django, które mi się podoba, ponieważ jego ORM jest wbudowany. Myślę jednak, że Django może być trochę więcej niż naprawdę potrzebuję (tj. Więcej funkcji niż naprawdę potrzebuję == wolniej?).
Czy ktoś ma jakieś doświadczenie z różnymi rozwiązaniami Python ORM, które mogą porównywać i kontrastować ich funkcje i funkcje, szybkość, wydajność itp.?
Odpowiedzi:
SQLAlchemy jest bardziej w pełni funkcjonalny i potężny (wykorzystuje wzorzec DataMapper). Django ORM ma czystszą składnię i łatwiej jest pisać (wzorzec ActiveRecord). Nie wiem o różnicach wydajności.
SQLAlchemy ma również warstwę deklaratywną, która ukrywa pewną złożoność i nadaje jej składnię w stylu ActiveRecord bardziej podobną do Django ORM.
Nie martwiłbym się, że Django będzie „zbyt ciężki”. Jest na tyle oddzielony, że możesz użyć ORM, jeśli chcesz, bez konieczności importowania reszty .
To powiedziawszy, jeśli już korzystałem z CherryPy dla warstwy internetowej i potrzebowałem tylko ORM, prawdopodobnie wybrałbym SQLAlchemy.
źródło
ORDER BY
DESC
w dokumentacji” oznacza „zły dla aktywnego wzorca zapisu”?Jeśli szukasz lekkości i znasz już modele deklaratywne w stylu django, sprawdź peewee: https://github.com/coleifer/peewee
Przykład:
Sprawdź dokumenty, aby uzyskać więcej przykładów.
źródło
Storm ma prawdopodobnie najprostszy interfejs API:
I sprawia, że bezbolesne jest wpadanie do surowego SQL, gdy trzeba:
źródło
Zwykle używam SQLAlchemy . Jest dość potężny i jest prawdopodobnie najbardziej dojrzałym ORM-em Pythona.
Jeśli planujesz używać CherryPy, możesz również zajrzeć do dejavu, ponieważ jest to Robert Brewer (facet, który jest obecnie kierownikiem projektu CherryPy). Osobiście nie korzystałem z niego, ale znam kilka osób, które to uwielbiają.
SQLObject jest nieco łatwiejszy w użyciu ORM niż SQLAlchemy, ale nie jest tak potężny.
Osobiście nie używałbym Django ORM, chyba że planowałem napisać cały projekt w Django, ale to tylko ja.
źródło
Deklaratywne rozszerzenie SQLAlchemy , które staje się standardem w wersji 0.5, zapewnia interfejs typu „wszystko w jednym” bardzo podobny do interfejsu Django lub Storm. Bezproblemowo integruje się również z klasami / tabelami skonfigurowanymi za pomocą stylu datamapper:
źródło
Używamy Elixir wraz z SQLAlchemy i do tej pory nam się podobało. Elixir nakłada warstwę na SQLAlchemy, dzięki czemu wygląda bardziej jak części licznika „wzorzec ActiveRecord”.
źródło
To wydaje się być kanonicznym punktem odniesienia dla interakcji z bazą danych wysokiego poziomu w Pythonie: http://wiki.python.org/moin/HigherLevelDatabaseProgramming
Stąd wygląda na to, że Dejavu implementuje wzorzec DataMapper Martina Fowlera dość abstrakcyjnie w Pythonie.
źródło
Myślę, że możesz spojrzeć na:
Jesień
Burza
źródło
Nie ma możliwego sposobu, aby nieużywane funkcje w Django spowodowały spadek wydajności. Może się przydać, jeśli kiedykolwiek zdecydujesz się na ulepszenie projektu.
źródło
Użyłem Storm + SQLite do małego projektu i byłem z niego bardzo zadowolony, dopóki nie dodałem wieloprocesowości. Próba użycia bazy danych z wielu procesów spowodowała wyjątek „Baza danych jest zablokowana”. Przełączyłem się na SQLAlchemy i ten sam kod działał bez żadnych problemów.
źródło
SQLAlchemy jest bardzo, bardzo potężny. Jednak nie jest to bezpieczne dla wątków, pamiętaj o tym podczas pracy z Cherrypy w trybie puli wątków.
źródło
Sprawdziłbym SQLAlchemy
Jest naprawdę łatwy w użyciu, a modele, z którymi pracujesz, wcale nie są złe.
Django używa SQLAlchemy do ORM,ale użycie go samo w sobie pozwala na wykorzystanie jego pełnej mocy.Oto mały przykład tworzenia i wybierania obiektów orm
źródło