【问题标题】:Python psycopg2 copy_from() to load data throws error for null integer values: DataError: invalid input syntax for integer: ""用于加载数据的 Python psycopg2 copy_from() 对空整数值抛出错误:DataError:整数的输入语法无效:“”
【发布时间】:2014-10-28 20:29:20
【问题描述】:

我正在尝试使用 psycopg2 的 copy_from() 方法将数据从 python 的 StringIO 对象加载到 Postgres 数据库表中。

我的 copy_from 在第一条记录本身上失败,特别是针对具有空值('' 不带引号)的特定(可为空)整数列。我也尝试过使用 Python 的 None 关键字而不是 '' 来表示 NULL 值。 它向我抛出以下错误: DataError:整数的输入语法无效:“” 上下文:复制,第 1 行,列:“”

代码如下所示:

table_data = StringIO.StringIO()
# Populate the table_data variable with rows delimited by \n and columns delimited by \t
cursor = db_connection.cursor()
cursor.copy_from(table_data, <table_name>)

此列是一个 smallint 列。

【问题讨论】:

    标签: python postgresql psycopg2


    【解决方案1】:

    默认情况下,COPY FROM(和copy_from)将 NULL 值编码为 \N。如果要使用空字符串表示NULL,则需要say so explicitly

    cursor.copy_from(table_data, table_name, null="")
    

    【讨论】:

    • 谢谢。该问题现已解决。但是,我收到一个新错误:DataError: invalid byte sequence for encoding "UTF8": 0x92 我应该为此提出一个新问题吗?
    • 这可能已经被回答了无数次:) 这是一个编码问题。您的数据很可能被编码为 windows-1252,您需要对其进行解码。
    • 我确实在 stackoverflow 上搜索了这个问题的答案,我在类似的行中找到了问题/答案,但这些并没有解决我的问题。我在这里提出了一个新的描述性问题。 stackoverflow.com/questions/26619801/… 请看一下。感谢您的帮助
    • copy_from() 方法不允许双引号之类的带引号的字符串。示​​例行 ["python", 598.00];它像 ""python"" 发送到数据库
    猜你喜欢
    • 2016-05-18
    • 1970-01-01
    • 1970-01-01
    • 2016-03-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多