我使用python进行编码,使用psql来保存我的数据。 我的问题是,当我写入数据库时,大约需要2-3分钟。 数据大小约为1,200,000(行)和3列。
插入功能:
def store_data(cur,table_name,data):
cur.executemany(
"INSERT INTO"+" "+table_name+" "+"(name, date,id) VALUES (%s, %s, %s)",
[(data[i][0], data[i][1], data[i][2]) for i in xrange(0,len(data))]
)
cur.connection.commit()
如何加速功能?
答案 0 :(得分:4)
使用COPY
命令。 Postgres Documentation。另请查看COPY上的psycopg documentation。
一些数字:300万行独立INSERT:3小时。使用COPY:7秒。
答案 1 :(得分:1)
除了使用COPY之外,W.Mann建议如果您有进一步的性能要求,您可以做得更多:
如果使用pg_restore,您可以尝试在多处理器系统上使用-j
选项并行运行多个作业。并查看上面链接的文档中给出的其他选项。
答案 2 :(得分:0)
查看executemany的文档:
Warning
In its current implementation this method is not faster than
executing execute() in a loop. For better performance you can use
the functions described in Fast execution helpers.
在同一位置,可以找到以下链接:http://initd.org/psycopg/docs/extras.html#fast-exec他们建议:
psycopg2.extras.execute_batch