2

这个功能:

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

4 回答 4

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()]
于 2010-11-10T19:28:47.073 回答
2

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

于 2010-11-10T19:24:02.087 回答
2

你会使用IFNULL

...IFNULL(MyField, 0) AS MyField...
于 2010-11-10T19:24:06.280 回答
2

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

最干净的做法是使用 SQL 合并:SELECT COALESCE(value, 0)将 SQL NULL 转换为 0。

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

于 2010-11-10T19:25:18.417 回答