我觉得这是一个非常基本的问题,但我找不到一个全面的答案。我想知道将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
。所以我的问题有所改变:
什么是最有效的方法以及如何实施?
答案 0 :(得分:2)
对于大数据集,请使用COPY
,通过psycopg2' copy_from
函数。