Я использую именованный курсор в psycopg2. Как сбросить старт курсора с 0? Я использовал следующий код, но безрезультатно и выдает ошибку.
with conn.cursor(name="curname") as cursor:
cursor.itersize = 100
cursor.execute("MOVE ABSOLUTE 0 IN curname",)
ошибка:
LINE 1: DECLARE "curname" CURSOR WITHOUT HOLD FOR MOVE ABSOLUTE 0 IN.
Вы должны инициализировать курсор запросом, используя cursor.execute()
. Затем вы можете использовать те же функции (fetchone()
, fetchall()
т.д.), fetchone()
с курсорами на стороне клиента.
Команда SQL MOVE
реализована с помощью scroll (значение [, mode = 'относительный']) в psycopg2.
Простой пример (запрос генерирует 10 строк с целыми числами от 1 до 10):
with conn.cursor(name="curname") as cursor:
cursor.itersize = 100
cursor.execute("select generate_series(1, 10)")
print('first:', cursor.fetchone())
cursor.scroll(9, mode = 'absolute')
print('tenth:', cursor.fetchone())
cursor.scroll(0, mode = 'absolute')
print('first again:', cursor.fetchone())
Выход:
first: (1,)
tenth: (10,)
first again: (1,)
Узнайте больше о серверных курсорах.