这个功能:
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.
如何让我的查询返回零而不是空值,以便我可以解决这个问题?(我正在绘制数据,所以我不能在我的选择语句中添加“不为空”。
您可以在查询中使用 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()]
放入IFNULL(fieldname, 0) AS fieldname
查询的字段列表。
你会使用IFNULL
...IFNULL(MyField, 0) AS MyField...
该错误没有意义;Python没有“NULL”,它有“None”。
最干净的做法是使用 SQL 合并:SELECT COALESCE(value, 0)
将 SQL NULL 转换为 0。
如果你得到 None,并且你知道这些值是整数,那么你可以放心地说int(x[0] or 0)
.