Я пытаюсь реализовать курсор на стороне сервера, чтобы «обойти» слабость Django ORM, когда дело доходит до получения огромного количества данных из базы данных. Но я не понимаю, как должен быть определен именованный курсор, поскольку мой текущий код, похоже, не работает должным образом. Я определяю курсор так:
id = 'cursor%s' % uuid4().hex
connection = psycopg2.connect('my connection string here')
cursor = connection.cursor(id, cursor_factory=psycopg2.extras.RealDictCursor)
Курсор, кажется, работает в том смысле, что его можно повторять и возвращать ожидаемые записи в виде словаря Python, но когда я пытаюсь закрыть его (cursor.close()
), я получаю исключение:
psycopg2 OperationalError: cursor *the generated cursor id* does not exist
Какого черта ?! Итак, какой объект я использую для извлечения данных из базы данных? Использует ли psycopg2 резервный (безымянный) курсор по умолчанию, поскольку тот, который я определил, не найден в моей базе данных (и если да ... мой большой вопрос: обязательно определить курсор на уровне db перед использованием psycopg2?) Я Сильно запутались, вы можете мне помочь?