2011-12-21 12 views
12

Piszę szybki i brudny skrypt, który wymaga interakcji z bazą danych (PG).SQLAlchemy lub psycopg2?

Scenariusz to pragmatyczne, taktyczne rozwiązanie istniejącego problemu. jednak wyobrażam sobie, że scenariusz z czasem przekształci się w bardziej "wyrafinowany" system. Biorąc pod uwagę fakt, że jest on obecnie składany bardzo szybko (tj. Nie mam czasu, aby wylać olbrzymie pokłady dokumentacji), mam ochotę iść szybką i brudną drogą, używając psycopg.

Korzyści dla psycopg2 (jak obecnie zrozumieć), że:

  1. napisany w C, więc szybciej niż sqlalchemy (napisany w Pythonie)?
  2. Brak warstwy abstrakcji przez DBAPI, ponieważ działa tylko z jedną db i tylko db (implikacja -> szybko)
  3. (Na razie), nie potrzebuję ORM, więc mogę bezpośrednio wykonywać moje instrukcje SQL bez konieczności nauczyć się składni nowego ORM (czyli lekki)

Wady:

  1. wiem, że chcę ORM dalej wzdłuż linii
  2. psycopg2 jest ("stary"?) - don” t wie, jak długo pozostanie on dostępny dla

Czy moje postrzeganie sqlalchemy (slow/interpretowane, nadęty, stroma krzywa uczenia się) Prawda - Czy mimo to mogę korzystać sqlalchemy w „szorstki i gotowe” sposób, w jaki chcesz użyć psycopg - mianowicie:

  1. wykonać polecenie SQL bezpośrednio bez konieczności o bałagan z warstwy ORM itp

Wszelkie przykłady robią to dostępne?

+0

Skąd wziął się pomysł, że psycopg2 jest "przestarzały"? Co ma być stopniowo wycofywane? – piro

Odpowiedz

31

SQLAlchemy jest ORM, psycopg2 jest sterownikiem bazy danych. Są to zupełnie różne rzeczy: SQLAlchemy generuje Instrukcje SQL i psycopg2 wysyłają zapytania SQL do bazy danych. SQLAlchemy zależy od psycopg2 lub innych sterowników baz danych do komunikacji z bazą danych!

Jako dość złożona warstwa oprogramowania SQLAlchemy dodaje trochę narzutów, ale jest też ogromnym wsparciem dla szybkości programowania, przynajmniej po opanowaniu biblioteki. SQLAlchemy to doskonała biblioteka i nauczy Cię całej koncepcji ORM, ale jeśli nie chcesz generować instrukcji SQL na początek, nie chcesz SQLAlchemy.

+0

Czytałem trochę na temat SQLAlchemy. Właśnie znalazłem, że mogę podać psycopg2 jako sterownik i mniej więcej używać ręcznie spreparowanego SQL-a, na przykład, do którego się nie mam, więc ostatecznie zdecydowałem się na SQLAlchemy. –

+1

SQLAlchemy i psycopg2 to zupełnie inne rzeczy, ta część jest prawdziwa. Ale SQLAlchemy nie jest ORM. ORM to tylko część tego, część, którą możesz całkowicie zignorować (i ma być całkowicie opcjonalna przez swojego twórcę, jak sam stwierdza w tym długim filmie wprowadzającym: http://www.youtube.com/watch? v = P141KRbxVKc). Więc w przypadku takim jak ten OP (przestarzały) problem, SA może być narzędziem dla "q'n'd" surowego rozwiązania SQL z możliwością przełączenia na później, bez zmiany narzędzia. – kratenko

3

Aby porozmawiać z bazą danych, potrzebny jest sterownik. Jeśli używasz klienta, takiego jak SQL Plus dla oracle, MysqlCLI dla Mysql, to będzie on kierował uruchomieniem zapytania, a klient otrzyma pakiet DBServer.

Aby komunikować się z zewnątrz przy użyciu dowolnego języka, takiego jak java, c, python, C# ... Potrzebujemy sterownika do tej bazy danych. psycopg2 to sterownik do uruchamiania zapytania dla PostgreSQL z Pythona.

SQLAlchemy to ORM, który nie jest taki sam jak sterownik bazy danych. Zapewni to elastyczność, dzięki czemu możesz napisać swój kod bez standardowego dla bazy danych. ORM zapewnia niezależność bazy danych dla programisty. Jeśli napiszesz object.save w ORM, to sprawdzi, która baza danych jest powiązana z tym obiektem i wygeneruje zapytanie wstawiania zgodnie z bazą danych zaplecza.