SQL使用零代替空值

2 投票
4 回答
3323 浏览
提问于 2025-04-16 06:52

这个函数:

for i in Selection: 
    cursor.execute(Query)
    ydata[i] = [int(x[0]) for x in cursor.fetchall()]

会引发:

ValueError: invalid literal for int(): NULL if a null value is found.

我该怎么做才能让我的查询返回零而不是空值,这样我就可以解决这个问题?(我在绘制数据,所以我不能在我的选择语句中加上“不是空值”的条件。)

4 个回答

2

这个错误听起来有点奇怪,因为Python里没有“NULL”,它用的是“None”。

最简单的方法是使用SQL的coalesce函数:SELECT COALESCE(value, 0),这样可以把SQL中的NULL转换成0。

如果你得到的是None,并且你知道这些值是整数,那么你可以放心地写成int(x[0] or 0)

2

在查询的字段列表中加上 IFNULL(fieldname, 0) AS fieldname

6

你可以在查询中使用条件语句来解决这个问题,这样在数据到达Python之前就能处理好:

CASE WHEN FIELD_NAME IS NULL THEN 0 ELSE FIELD_NAME END,

开始编辑

其他SQL的变种处理方式不同(摘自其他回答):

COALESCE(FIELD_NAME, 0)

或者

IFNULL(FIELD_NAME, 0)

结束编辑

或者在你的列表推导式中这样处理(假设NULL是一个预定义的对象或常量):

ydata[i] = [(int(x[0]) if x[0] != NULL else 0) for x in cursor.fetchall()]

或者创建一个自定义的转换函数:

def field_to_int(val):
    if val == NULL:
        return 0
    else:
        return int(val)

for i in Selection: 
    cursor.execute(Query)
    ydata[i] = [field_to_int(x[0]) for x in cursor.fetchall()]

撰写回答