2017-02-17 18 views
6

Używam python codziennie z dużym naciskiem na pracę bazy danych.Python pyodbc kursor vs kursor bazy danych

Korzystanie pyodbc moim standardowym początku jest coś takiego jak

connection_hostname = pyodbc.connect('connection_string') 
cursor_hostname = connection_hostname.cursor() 
command_hostname = 'select * from everything_forever;' 
cursor_hostname.execute('command_hostname') 

i jeśli muszę chcą ponownie wykorzystać kursor do innego zapytania zamiast tworzyć nowy kursor, można przechowywać zestaw wyników z pierwszego zapytania jak tak :

results_from_query = cursor_hostname.fetchall() 

Następnie przejdź dalej.

To podejście dobrze sprawdziło się do tej pory.

Niedawno zmieniłem pracę, a niektórzy z moich nowych współpracowników, którzy zazwyczaj używają interfejsów graficznych do pracy z DB zaczęli panikować, gdy demonstrowałem powyższą technikę. Tym, co je wyłączyło, było słowo kluczowe kursora. Rozumiem, że kursory są dużym nie-nie z DB, ponieważ wskazują na logikę, która nie jest oparta na teorii mnogości, mają tendencję do popychania hosta na niskie/zerowe poziomy zrównoleglania i operacji typu RBAR, ale nie wierzę w kursor ODBC. m deklaracja powyżej jest taka sama jak kursor, o którym myślimy, kiedy mamy nasze czapki techniczne i administracyjne dla serwera SQL Server.

Czy ktoś może wyjaśnić różnicę między tymi kursorami ODBC a kursorami typu SQL Server (zakładając, że mam rację, że są różne)?

Jeśli jestem niepoprawny, proszę oświecić mnie i powiedzieć, w jaki sposób mogę bardziej efektywnie korzystać z moich baz danych.

Dlaczego nie można po prostu wykonać bezpośrednio z połączenia jak

connection_hostname.execute(command_hostname) 

mam ochotę struktur kursorów ODBC, ponieważ są one ma coś wspólnego z pozwalając wielu kursorów przez tego samego połączenia w celu zmniejszenia kosztów połączeń i takie. Odejście od bazy?

Odpowiedz

2

Kursory bazy danych są obrażane i nieufne przez DBA, zazwyczaj z nie bez powodu. Często są źródłem problemów z wydajnością, a podejście oparte na zestawie jest prawie zawsze lepsze.

http://www.databasejournal.com/features/mssql/article.php/3896206/What-Every-DBA-Ought-to-Know-About-SQL-Server-Cursors-and-Their-Alternatives.htm na przykład mówi:

„W moim miejscu pracy, kursory są zakazane w naszych standardów SQL Server w celu korzystania z kursorem, musimy udowodnić, że wydajność kursora jest lepsza niż przeróbki. wiersze w inny sposób. "

Aby uprościć, możesz wyjaśnić swoim nerwowym przyjaciołom, że kursor python jest w rzeczywistości synonimem tego, co inne języki nazywają zestawem rekordów lub zestawem wyników, a ich narzędzia GUI używają również kursorów/zestawów rekordów (ale nie tworzy kursora na DB!).

difference between cursor and connection objects