SQL零而不是null

时间:2010-11-10 19:21:21

标签: python sql sqlite null zero

此功能:

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.

如何让我的查询返回零而不是null,以便我可以解决这个问题? (我正在绘制数据,所以我不能在我的select语句中添加“is not null”。

4 个答案:

答案 0 :(得分:6)

您可以在查询中使用case语句访问Python之前解决此问题:

CASE WHEN FIELD_NAME IS NULL THEN 0 ELSE FIELD_NAME END,

开始修改

其他SQL变体做得与众不同(取自其他答案):

COALESCE(FIELD_NAME, 0)

IFNULL(FIELD_NAME, 0)

结束修改

或者在列表comp中处理它(假设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()]

答案 1 :(得分:2)

IFNULL(fieldname, 0) AS fieldname放入查询的字段列表中。

答案 2 :(得分:2)

您使用IFNULL

...IFNULL(MyField, 0) AS MyField...

答案 3 :(得分:2)

错误没有意义; Python没有“NULL”,它有“None”。

最干净的事情是使用SQL coalesce:SELECT COALESCE(value, 0)将SQL NULL转换为0。

如果您收到无,并且您知道值是整数,那么您可以安全地说int(x[0] or 0)