在psycopg2中移动命名光标

时间:2018-11-29 02:07:16

标签: python postgresql psycopg2

我在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.

1 个答案:

答案 0 :(得分:2)

您必须使用cursor.execute()使用查询来初始化光标。然后,您可以使用与客户端游标相同的功能(fetchone()fetchall()等)。

SQL MOVE命令由psycopg2中的scroll(value[, mode='relative'])实现。

简单的示例(查询生成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,)

详细了解Server side cursors.