Каковы побочные эффекты повторного использования курсора sqlite3? - PullRequest
0 голосов
/ 28 января 2019

Как проект для домашних животных, я писал свой собственный ORM, чтобы помочь мне лучше понять решения, принятые производственными ORM, такими как Peewee или более сложная sqlalchemy.

В соответствии с моим вопросом о названиях, лучше лисоздать один курсор и повторно использовать его для нескольких выполнений SQL или создать новый курсор для каждой транзакции?

Я уже догадывался об избежании проблем с состоянием (транзакции без фиксации), но есть ли другая причина, по которой он будетлучше иметь один курсор для каждой операции (вставить, обновить, выбрать, удалить или создать)?

1 Ответ

0 голосов
/ 29 января 2019

Профилировали ли вы и обнаружили ли вы, что создание курсоров является значительным источником накладных расходов?

Курсоры - это артефакт DB-API 2.0, не обязательно фактическая существующая "вещь".Они предназначены для обеспечения общего интерфейса для выполнения запросов и обработки результатов / итерации.Как они реализованы скрытно, зависит от драйвера базы данных.Если вы собираетесь поддерживать драйверы, совместимые с DB-API 2.0, я предлагаю просто использовать метод cursor (), чтобы создать курсор для каждого выполнения запроса.Я бы рекомендовал НИКОГДА не использовать одноэлементный или совместно используемый курсор.

Например, в SQLite курсор, по сути, является оберткой вокруг объекта sqlite3_stmt, поскольку такого понятия, как «sqlite3_cursor», не существует.Драйвер stdlib sqlite3 поддерживает внутренний кэш объектов sqlite3_stmt, чтобы избежать затрат на компиляцию часто используемых запросов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...