2012-01-11 29 views
18

Jestem względnie nowy w bazach danych, wykonuję zapytania SQL, itp. W tej chwili używam wyłącznie MS SQL Server dla moich DB (to jest to, czego używamy w mojej pracy), ale mam nadzieję, że odpowiedzi na moje pytanie mogą być bardziej ogólne niż tylko dla tego konkretnego DB.pymssql versus pyodbc versus adodbapi versus ...

Robię dobry kawał mojej pracy przy użyciu samej aplikacji interfejsu DB (w tym przypadku SQL Server Management Studio), ale także wykonuję niektóre prace za pomocą skryptów Pythona, z których niektóre działają jako zadania Cron, z których niektóre są stronami internetowymi, w których użytkownicy mogą przesyłać zapytania do bazy danych.

Używam modułu pymssql do wysyłania zapytań do & pisząc do DB z Pythona. Ale jest kilka irytujących problemów, na które napotykam. (Wydaje się, że pymssql nie może używać tabel tymczasowych, a także miałem problemy z "autocommit", ale to prawdopodobnie moja własna wina.)

Tak więc nie mając pojęcia o tym, chciałbym tylko poczuć kierunek, w którym powinienem iść. O ile mogę powiedzieć, mogę albo:

  • użycie pymssql, który mówi bezpośrednio do serwerów MS SQL
  • użycie pyodbc, który wymaga zainstalowania FreeTDS & unixODBC pierwszy, a ich ustanowieniem
  • korzystania moduł adodbapi i nie jestem pewien, jakie wymagania są tutaj potrzebne.
  • inna metoda?

Rzecz jest, nie W PEŁNI uzyskać, co robi ODBC. Wydaje się, że jest to jakiś "pośrednik uwierzytelnienia", coś w rodzaju środkowego człowieka, który zapewnia, że ​​użytkownik jest tym, kim mówi. I jeszcze mniej rozumiem ADO.

Podczas gdy pymssql wydaje się być najprostszym sposobem na przejście, wydaje się, że ludzie wydają się gorzej traktować, i że ostatecznie zostanie wycofany. Wolałbym nauczyć się "właściwej" drogi, ponieważ dopiero zaczynam od tych rzeczy.

Poszukuję więc pewnych cennych opinii na temat najlepszego sposobu, aby pyton mógł rozmawiać z serwerem MS SQL i rozmawiać z DB w ogóle. Chciałbym zdefiniować "najlepszy" jako najlepszy dla kogoś, kto zrobi z nim umiarkowanie skomplikowane rzeczy. (Podczas gdy dopiero zaczynam, jest to coś, co w końcu będę musiał nieco przyspieszyć.)

Dzięki! Mike

Odpowiedz

16

pyodbc (zalecane)

zacząłem przy użyciu tego modułu kilka miesięcy temu i nie mamy zastrzeżeń do tej pory. Społeczność programistów wydaje się bardziej aktywna niż pymssql. Nie miałem dotychczas problemów z instalacją (32-bitowy Win XP i 64-bitowy serwer 2008 R2). Dodatkową korzyścią będzie to, że nie jesteś ograniczony do serwerów MS SQL.

Możesz znaleźć: http://www.lfd.uci.edu/~gohlke/pythonlibs/ pomocne przy instalacji w systemie Windows.

pymssql

Pracowałem już z wersji 1.x do około 2,5 lat. Miałem drobne problemy z ograniczeniami rozmiarów dużych obiektów. Podczas wielowątkowości natrafiłem też na ogromne problemy (do tego momentu, gdy musiałem się wyłączyć, jeśli wyłączono). 1.x został oparty na przestarzałych bibliotekach MS.Jednak ostatnia wersja to 2.x i nie używa już tych przestarzałych bibliotek. Zamiast tego używa FreeTDS (jak pyodbc). Brzmi dobrze, ale jeszcze tego nie próbowałem.

adodbapi

Próbowałem przełączania się pymssql i zastąpienie go adodbapi około rok temu, a niektóre z pytań, które działało w porządku z pymssql powiodło się bez wyraźnego powodu. Szybko zrezygnowałem z adodbapi.

+3

Jak ogłoszono w grudniu 2016 r pyodbc jest teraz [oficjalnie wspierany przez Microsoft] (https://blogs.technet.microsoft.com/dataplatforminsider/2016/12/09/sql-server -python-whats-new /). –

9

Z mojego doświadczenia wynika, pyodbc jest nieco problematyczne w tych dniach. Po pierwsze, nie wydaje się, aby łańcuchy unicode były zarządzane poprawnie lub niezawodnie. Po drugie, API jest nieco przestarzały i specyficzny, a mniej Python DB-API (PEP-249) zgodny.

jestem pośród migracji kodu projektu do PYMSSQL które podczas moich testów do tej pory, obejmujący podstawy na obu powyższych zagadnień. Nie jestem świadomy żadnej deprecjacji za pomocą tego interfejsu API, ponieważ wydaje się on być nieco aktualizowany (główna wersja z października 2013 r.), Dokumenty są mniej lub bardziej aktualne i jest aktywne.

Są to tylko moje obecne odkrycia i postęp pyodbc i PYMSSQL. Ulec zmianie oczywiście :)

+2

Tak, pyodbc przeszedł trochę trudny okres, ale otrzymał TLC ostatnio i jest teraz [oficjalnie wspierany przez Microsoft] (https://blogs.technet.microsoft.com/dataplatforminsider/2016/12/09/ sql-server-python-whats-new /). –

+1

początku tego roku (2017) była propozycja, aby zaprzestać pymssql, patrz [Wniosek o umorzeniu pymssql na rzecz pyodbc] (https://github.com/pymssql/pymssql/issues/477) i [pymssql vs pyodbc] (https://groups.google.com/forum/#!topic/pymssql/CLXHtLKBWig). Postanowili kontynuować, ale ostatni link pokazuje, że społeczność stojąca za pymssql stara się znaleźć opiekunów. Myślę, że obecnie pyodbc wydaje się lepszym wyborem w ogóle (być może pymssql jest jeszcze lepszy w zależności od twoich potrzeb). –