此功能:
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”。
答案 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)
。