Python pyodbc курсор против курсора базы данных

Я использую python каждый день с большим акцентом на работу с базой данных.

использование pyodbc мой стандартный старт-это что-то вроде

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

и если мне нужно повторно использовать курсор для другого запроса вместо создания нового курсора, Я могу сохранить результирующий набор из первого запроса следующим образом:

results_from_query = cursor_hostname.fetchall()

и двигаться дальше после этого.

этот подход хорошо работал для меня до сих пор.

недавно я сменил работу, и некоторые из моих новых коллеги, которые обычно используют GUIs для работы со своими БД, начали паниковать, когда я продемонстрировал вышеуказанную технику. Их вывело из себя ключевое слово cursor. Я понимаю, что курсоры-это большой нет-нет с DBs, потому что они указывают на логику, не основанную на теории множеств, имеют тенденцию толкать Хост на низкие/нулевые уровни распараллеливания и операции типа RBAR, но я не верю, что курсор ODBC, который я объявляю выше, такой же, как курсор, о котором мы думаем, когда у нас есть SQL Server engineering и administration шляпы на голове.

может ли кто-нибудь объяснить разницу между этими курсорами ODBC и курсорами типа SQL Server (предполагая, что я прав, что они разные)?

Если я не прав, пожалуйста, просветите меня и скажите мне, как я могу более эффективно взаимодействовать с моим DBs.

почему вы не можете просто выполнить непосредственно из соединения, как

connection_hostname.execute(command_hostname)

Я чувствую, что структуры курсора ODBC, как они, имеют какое-то отношение к разрешению нескольких курсоров через такое же соединение для уменьшения цены соединения и такое. Далеко от базы?

1 ответов


курсоры базы данных поносят и не доверяют DBA, как правило, по уважительной причине. Они часто являются источником проблем с производительностью, и ряд подход почти всегда лучше.

http://www.databasejournal.com/features/mssql/article.php/3896206/What-Every-DBA-Ought-to-Know-About-SQL-Server-Cursors-and-Their-Alternatives.htm например говорит:

" на моем рабочем месте курсоры запрещены в наших стандартах SQL Server. Чтобы использовать курсор, мы надо доказать, что производительность курсора лучше, чем обработка строк другим способом. "

чтобы упростить, вы можете объяснить своим нервным друзьям, что курсор python на самом деле является синонимом того, что другие языки называют набором записей или набором результатов, и что их инструменты GUI также используют курсоры/наборы записей (но не создают курсор на БД!).

разница между курсором и объектами подключения