Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/362.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 检索后更新postgresql_Python_Postgresql_Psycopg2 - Fatal编程技术网

Python 检索后更新postgresql

Python 检索后更新postgresql,python,postgresql,psycopg2,Python,Postgresql,Psycopg2,您好,我正在使用服务器端游标功能从PostgreSQL检索大型数据集。我需要获取该行(然后对其执行一些操作),然后更新一个布尔列以指示其已被处理。这就是我迄今为止所尝试的:- import psycopg2 import psycopg2.extras import sys query = """ select * from exports; """ con = psycopg2.connect("dbname='test' user='postgres' password='*

您好,我正在使用服务器端游标功能从PostgreSQL检索大型数据集。我需要获取该行(然后对其执行一些操作),然后更新一个布尔列以指示其已被处理。这就是我迄今为止所尝试的:-

import psycopg2

import psycopg2.extras
import sys

query = """
    select * from exports;
"""


con = psycopg2.connect("dbname='test' user='postgres' password='*****'")

cursor = con.cursor('server_side_cursor', cursor_factory=psycopg2.extras.DictCursor)
cursor.execute(query)

while True:
    rows = cursor.fetchmany(5000)
    if not rows:
        break
    row_count = 0
    for row in rows:
        row_count += 1
        print "row: %s    %s\n" % (row_count, row['id'])
        cursor.execute("UPDATE exports SET (status) = (true), WHERE id = row['id']")
        pass

con.close()
但是,我得到了以下错误:-

psycopg2.ProgrammingError: can't call .execute() on named cursors more than once

您需要一个新光标来执行更新查询:

import psycopg2
import psycopg2.extras
import sys

query = """select * from exports;"""

con = psycopg2.connect("dbname='test' user='postgres' password='*****'")
cursor = con.cursor('server_side_cursor', cursor_factory=psycopg2.extras.DictCursor)
cursor.execute(query)

while True:
    rows = cursor.fetchmany(5000)
    if not rows:
        break
    row_count = 0
    for row in rows:
        row_count += 1
        print "row: %s    %s\n" % (row_count, row['id'])
        cursor2 = con.cursor()
        cursor2.execute("UPDATE exports SET (status) = (true), WHERE id = row['id']")
        cursor2.close()

con.close()