将Python数据类型复制到Postgres

时间:2015-06-21 20:46:57

标签: python postgresql psycopg2

我觉得这是一个非常基本的问题,但我找不到一个全面的答案。我想知道将python数据类型(如列表或词典)复制到postgres数据库(使用psycopg2)的最佳做法是什么。

假设我创建或拥有一个表格,我想填写之前计算的数据,例如

data = [(n, random.randint(0, 100)) for n in range(0, 100)]

据我所知,复制数据的标准方法类似于

curs.executemany("""
  INSERT INTO my_table (id, rand_int)
  VALUES (%s, %s)""", data)

我猜这会在列表中循环并且相当慢。有更聪明或更有效的方式吗?

更新

与此同时,我发现this answer,建议使用类似的内容:

args_str = ','.join(cur.mogrify("(%s,%s)", x) for x in data)
cur.execute("INSERT INTO table VALUES " + args_str) 

Craig建议his answer here使用copy_from。所以我的问题有所改变:

什么是最有效的方法以及如何实施?

1 个答案:

答案 0 :(得分:2)

对于大数据集,请使用COPY,通过psycopg2' copy_from函数。

http://initd.org/psycopg/docs/cursor.html#cursor.copy_from

另见how to speed up insertion performance in PostgreSQL