直接在 Python 中重新创建 Postgres COPY?
-
18-09-2019 - |
题
我有一个数据块,目前是 n 元组列表,但格式非常灵活,我想将其附加到 Postgres 表中 - 在这种情况下,每个 n 元组对应于数据库中的一行。
到目前为止,我一直在做的是将这些内容全部写入 CSV 文件,然后使用 postgres 的 COPY 将所有这些内容批量加载到数据库中。这可行,但不是最理想的,我更希望能够直接从 python 完成这一切。python 中是否有一种方法可以在 Postgres 中复制 COPY 类型的批量加载?
解决方案
如果您使用的是 psycopg2 驱动程序,则光标会提供 copy_to
和 copy_from
可以从任何类似文件的对象(包括 StringIO
缓冲)。
文件里有例子 示例/copy_from.py 和 示例/copy_to.py 附带的 psycopg2 源代码分布.
这段摘录来自于 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')
不隶属于 StackOverflow