如何应对"无"插入SQL数据库时的值?

时间:2017-12-07 01:40:27

标签: python sql database postgresql

我的数据集中的某些行是这样的:其中None被认为是整数。

Boston (2017)   Documentary Jon Dunham  5-Dec-17    100 5   None    63  None 

当我将此行插入Postgres时,其中None的列类型为INTEGER,我收到此错误:

psycopg2.DataError: invalid input syntax for integer: "None"

我将原始数据存储在csv文件中,它是一个非常大的数据集(大约2000年),我应该如何处理None值?

1 个答案:

答案 0 :(得分:0)

没有价值,或在postgres中未知NULL

https://www.postgresql.org/docs/current/static/functions-comparison.html

  

空输入被视为逻辑值“未知”

如果您以csv格式存储原始数据,则使用unquoted empty string将csv导入postgres,但是从您的示例中看起来您有tsc(制表符代替逗号),因此您应该使用{{1对于\N s。

https://www.postgresql.org/docs/current/static/sql-copy.html

  

NULL

     

指定表示空值的字符串。默认值为\ N.   (反斜杠-N)文本格式,以及CSV中未加引号的空字符串   格式。对于案例,您甚至可能更喜欢文本格式的空字符串   你不希望区分空字符串的空字符串。这个   使用二进制格式时不允许使用选项。

也可以从上面的引文中明确指出csv中的null表示,例如:

NULL

我刻意制作了一个错误的#34;使用t=# create table n(i int, t text); CREATE TABLE t=# copy n from stdin delimiter '|' null 'None'; Enter data to be copied followed by a newline. End with a backslash and a period on a line by itself, or an EOF signal. >> 1|a >> None|b >> 2| None >> None|None >> \. COPY 4 t=# select * from n; i | t ---+------- 1 | a | b 2 | None | (4 rows) ,提供i=2,而不是" None" - 如果您决定使用空标识符,则必须确保它在分隔符后确定,例如,如果您使用标签(如我假设的那样)你的样本),它应该是标签"None",而不是两个或四个空格,否则chr(9)将被视为字符串值,而不是" None" ......