在 PostgreSQL 中使用 psycopg2 进行批量更新不起作用

问题描述 投票:0回答:1
def update_database(self, results):
    try:
        length = len(self.unique_ids)
        update_data = [(self.unique_ids[i], results[i]) for i in range(length)]
        query = """
                UPDATE public.post_data AS p
                SET content = t.content
                FROM (VALUES %s)
                AS t (unique_id, content)
                WHERE p.unique_id = t.unique_id;
                """

        template = '(%s, %s)'
        execute_values(self.cursor, query, update_data, template=template)
        self.conn.commit()
        logging.info("Successfully Updated")


    except Exception as error:
        logging.warning(f"Update Error -> {error}")

    finally:
        self.conn.close()
        self.cursor.close()

这是我执行批量更新的代码。当我在查询控制台中单独运行查询时,它工作得很好,但不能以这种方式正常工作。

python database postgresql backend psycopg2
1个回答
0
投票

self.cursor
更改为
self.conn.cursor()

更好的是,使用

with
确保连接在事务后关闭。 喜欢:

with self.conn.cursor() as cursor:
    execute_values(cursor, query, update_data, template=template)
    self.conn.commit()
    logging.info("Successfully Updated")
© www.soinside.com 2019 - 2024. All rights reserved.