使用psycopg2 copy_from()在Postgresql中复制NULL值

n10*_*000 4 postgresql psycopg2

这似乎是一个相当受欢迎的问题,但这里的所有答案都没有帮助我解决问题...我的OS X机器上有一个Postgresql 9.5表:

CREATE TABLE test (col1 TEXT, col2 INT)
Run Code Online (Sandbox Code Playgroud)

以下函数使用psycopg2 copy_from()命令:

def test_copy(conn, curs, data):
    cpy = BytesIO()
    for row in data:
         cpy.write('\t'.join([str(x) for x in row]) + '\n')
    print cpy
    cpy.seek(0)
    curs.copy_from(cpy, 'test')

test_copy(connection, [('a', None), ('b', None)])
Run Code Online (Sandbox Code Playgroud)

并将导致此错误:

ERROR:  invalid input syntax for integer: "None"
CONTEXT:  COPY test, line 1, column col2: "None"
STATEMENT:  COPY test FROM stdin WITH DELIMITER AS '    ' NULL AS '\N'
Run Code Online (Sandbox Code Playgroud)

我也试过curs.copy_from(cpy, 'test', null=''),curs.copy_from(cpy, 'test', null='NULL').任何建议都非常感谢.

n10*_*000 9

好的,经过更多的试验和错误,我找到了解决方案:

copy_from(cpy, 'test', null='None')
Run Code Online (Sandbox Code Playgroud)

  • 如果您在 `io.StringIO` 上使用 `csv.write`,则 `null=''` 有效(`psycopg2 2.8`、`postgresql 13`) (4认同)