Я довольно новичок в Python и Flask, и, работая над примерами, не мог не заметить курсоры. До этого я программировал на PHP, где мне никогда не нужны курсоры. Поэтому мне стало интересно: что такое курсоры и почему они так много используют в этих примерах кода?Почему в mysqlclient нет курсоров?
Но где бы я ни повернулся, я не видел ясный вердикт и много предупреждений:
- Wikipedia: «Извлечение строки из курсора может привести к сети туда и обратно каждый раз, когда» и «курсоры распределять ресурсы на сервере, такие как блокировки, пакеты, процессы и временное хранилище ».
- StackOverflow: См. Ответ от AndreasT.
- The Island of Misfit Cursors: «Хороший разработчик никогда не отказывается использовать инструмент только потому, что его часто неправильно используют другие».
И в довершение всего, я узнал, что MySQL не поддерживает курсоры!
Похоже, что единственным кодом, который не использует курсоры в библиотеке mysqlclient
, является модуль _msql
, и автор неоднократно предупреждает об использовании его по соображениям совместимости: «Если вы хотите писать приложения, которые переносятся через базы данных , используйте MySQLdb и не используйте этот модуль напрямую ».
Надеюсь, я достаточно хорошо объяснил и поддержал свою дилемму. Вот два больших вопроса, которые беспокоят меня:
- Поскольку MySQL не поддерживает курсоры, в чем смысл построения всего объекта в иерархии классов курсора?
- Почему не курсоры необязательны в
mysqlclient
?
Я не думаю, что я запутал проблему. В моем вопросе конкретно упоминается библиотека 'mysqlclient', которая построена на' MySQLdb' и, как ожидается, будет поддерживать только MySQL. И я не уверен, что согласен с общей практикой API. Почему дизайнер библиотеки накладывает на меня курсоры? Что делать, если я не хочу использовать курсоры в некоторых ситуациях, даже если базовый движок поддерживает их? Они должны быть необязательными (это мой вопрос № 2). – dotslash
Да, вы путаете проблемы. Класс 'Cursor' в' mysqlclient' НЕ является курсором уровня базы данных («курсор сервера»), поэтому вся ваша точка зрения * курсора уровня базы данных просто спорна. И никто не заставляет вас использовать курсоры уровня * базы данных * на поддерживающих их механизмах БД (например, dc http://icitd.org/psycopg/docs/usage.html#server-side-cursors). –
«так что вся ваша точка зрения курсоров уровня базы просто спорна». Когда я был в курсе курсоров на уровне базы данных? На самом деле, ссылка, которую вы поделились спорно, потому что этот вопрос относится только к MySQL. Но позвольте мне перефразировать исходный вопрос так, как я думаю, вы поймете: поскольку у MySQL нет курсоров на уровне базы данных, почему 'mysqlclient', библиотека, посвященная MySQL, маскируется как реализация курсора? Является простой лени? Или библиотека делает какие-то закулисные вещи? Ответьте только, если вы можете ответить в контексте 'mysqlclient'. Мне не нужен аргумент. – dotslash