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.

これを修正できるように、クエリでnullではなくゼロを返すようにするにはどうすればよいですか?(データをプロットしているので、selectステートメントに「isnotnull」を追加できません。

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」がなく、「なし」があります。

最もクリーンな方法は、SQL合体を使用することです。SQLNULLSELECT COALESCE(value, 0)を0に変換します。

Noneを取得していて、値が整数であることがわかっている場合は、安全に言うことができますint(x[0] or 0)

于 2010-11-10T19:25:18.417 に答える