迭代postgresql表并从python更新行

时间:2014-04-28 22:47:30

标签: python postgresql

我使用python 3和psycopg2连接到postgresql表。

该表有两列:第一列是一些更改字符串,第二列是空字符串。

我想查看所有行和每行,读取第一列中的字符串,在其上计算一些python实现的函数,并使用该结果更新第二列。

什么是最有效的(并且希望是惯用的)方式呢?

请假设我必须从python连接到db。

2 个答案:

答案 0 :(得分:1)

最有效的方法可能是使用COPY将单列转储到文本文件,通过python提供它,截断表,然后用COPY加载生成的两列。

答案 1 :(得分:1)

如果在纯SQL中进行更新不是一个选项,我建议使用命名的psycopg游标,这将对您的选择查询进行分块。然后,您可以使用标准Python for row in cursor循环迭代游标,并根据需要自动拉入新行(如果表格非常大,这将防止内存问题。)

拥有一个索引也是至关重要的,这样每次更新都要尽可能快(即使对于较小的表,顺序扫描需要200毫秒,而2毫秒会快速加起来。)

最后,如果可能的话,我建议批处理提交,可能与你的命名游标的块大小(默认为2000)一起使用,因为提交很昂贵,并且在每次迭代后执行提交会很快加起来

您可以将select调整为仅拉入第二列为空字符串的行,以便在由于错误,新数据等而多次运行代码时可以重新启动代码。