【问题标题】:Recreating Postgres COPY directly in Python?直接在 Python 中重新创建 Postgres COPY?
【发布时间】:2010-12-24 14:34:30
【问题描述】:

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

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

【问题讨论】:

    标签: python postgresql psycopg2


    【解决方案1】:

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

    examples/copy_from.pyexamples/copy_to.py 文件中有示例,这些示例与 psycopg2 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')
    

    【讨论】:

    • 我很高兴...如果它对您有用,请不要忘记点击接受按钮以获取此答案。我注意到您尚未接受其他问题的任何答案,但“接受”复选标记可帮助遇到相同问题的其他人一目了然地知道哪个答案为您解决了问题。
    • 请修改它以包含布尔值和数组,因为这些似乎对我不起作用!
    猜你喜欢
    • 2011-10-09
    • 1970-01-01
    • 1970-01-01
    • 2020-01-07
    • 2020-09-26
    • 1970-01-01
    • 2013-01-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多