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 также используют курсоры/наборы записей (но не создают курсор на БД!).