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()
这是我执行批量更新的代码。当我在查询控制台中单独运行查询时,它工作得很好,但不能以这种方式正常工作。
将
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")