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