我有一个数据块,目前作为n元组的列表,但格式非常灵活,我想附加到Postgres表 - 在这种情况下,每个n元组对应于DB中的一行.
到目前为止我一直在做的是将这些全部写入CSV文件,然后使用postgres的COPY将所有这些内容加载到数据库中.这是有效的,但是不是最理想的,我更愿意直接从python中完成这一切.在python中是否有一种方法可以在Postgres中复制COPY类型的批量加载?
如果您使用的psycopg2驱动程序,游标提供一个copy_to
和copy_from
功能,可以从任何类似文件的对象(包括读取StringIO
缓冲).
psycopg2源代码分发附带的文件examples/copy_from.py和examples/copy_to.py中有一些示例.
摘录来自以下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')