在Postgres SQL中插入NULL/空值到实数字段

0 投票
2 回答
6358 浏览
提问于 2025-04-18 16:13

我有一个要插入到表格中的字符串,但有些值是空的,这没关系,因为这些值本来就是要留空的。我想找一个聪明的方法来处理这个问题,而不需要重写我的插入字符串……实际上它比下面的内容要长得多,但下面的例子展示了两个被定义为 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)
)

撰写回答