在Postgres SQL中插入NULL/空值到实数字段
我有一个要插入到表格中的字符串,但有些值是空的,这没关系,因为这些值本来就是要留空的。我想找一个聪明的方法来处理这个问题,而不需要重写我的插入字符串……实际上它比下面的内容要长得多,但下面的例子展示了两个被定义为 real
数据类型的字段。
cursor.execute("INSERT INTO table_" + country + " (lat, lon) VALUES (%s, %s)" , (loc['LAT'], loc['LON'], ))
所以有时候
loc['LAT']
可能是 ''
,而其他时候比如 '54.44'
,loc['LON']
也可能是 ''
,而其他时候比如 '53.46'
如果这些是空的,我会遇到以下错误:
pg8000.errors.ProgrammingError: ('ERROR', '22P02', 'invalid input syntax for type real: ""')
2 个回答
0
你现在使用的是一个空字符串,意思是这一列的某一行没有数据。空字符串并不是一个有效的数字,所以你才会遇到错误。
你需要在这一列允许使用NULL值,并且在输入数据时,如果某个值缺失,就用NULL(没有引号)来代替,而不是用一个实际的数字。
不过,如果你允许使用NULL值,你要明白,当你对这一列进行统计分析时,SQL处理NULL值的方式可能会导致输出结果出现一些奇怪的情况。如果这些情况不太好,你就需要换一种方法了。
3
如果这些列可以接受 null
值
cursor.execute("""
insert into table_" + country + " (lat, lon) values (%s, %s)
""" , (loc['LAT'] or None, loc['LON'] or None)
)