用Python直接重新创建Postgres COPY?

时间:2009-12-08 21:30:04

标签: python postgresql psycopg2

我有一个数据块,目前作为n元组的列表,但格式非常灵活,我想要附加到Postgres表 - 在这种情况下,每个n元组对应于一行DB。

到目前为止,我一直在做的就是将这些全部写入CSV文件,然后使用postgres的COPY将所有这些内容批量加载到数据库中。这是有效的,但是不是最理想的,我更愿意直接从python中完成这一切。在python中是否有一种方法可以在Postgres中复制COPY类型的批量加载?

1 个答案:

答案 0 :(得分:50)

如果您正在使用psycopg2驱动程序,则游标提供copy_tocopy_from函数,该函数可以从任何类似文件的对象(包括StringIO缓冲区)读取。

examples/copy_from.py附带的文件examples/copy_to.pypsycopg2 source distribution中有一些示例。

此摘录来自copy_from.py示例:

conn = psycopg2.connect(DSN)
curs = conn.cursor()
curs.execute("CREATE TABLE test_copy (fld1 text, fld2 text, fld3 int4)")

# anything can be used as a file if it has .read() and .readline() methods
data = StringIO.StringIO()
data.write('\n'.join(['Tom\tJenkins\t37',
                  'Madonna\t\N\t45',
                  'Federico\tDi Gregorio\t\N']))
data.seek(0)

curs.copy_from(data, 'test_copy')