Domanda

Questa funzione:

for i in Selection: 
    cursor.execute(Query)
    ydata[i] = [int(x[0]) for x in cursor.fetchall()]

rilanci:

ValueError: invalid literal for int(): NULL if a null value is found.

Come posso fare la mia domanda zeri di ritorno, invece di valori null in modo che possa risolvere questo problema? (Sto tramando i dati, quindi non posso aggiungere "non è nullo" per la mia dichiarazione prescelta.

È stato utile?

Soluzione

È possibile risolvere questo problema prima che arrivi al Python con un'istruzione case nella query:

CASE WHEN FIELD_NAME IS NULL THEN 0 ELSE FIELD_NAME END,

iniziare modifica

Altre varianti SQL lo fanno in modo diverso (presi da altre risposte):

COALESCE(FIELD_NAME, 0)

o

IFNULL(FIELD_NAME, 0)

fine modifica

O gestirlo nella lista il comp in questo modo (si assume NULL è un oggetto predefinito o costante):

ydata[i] = [(int(x[0]) if x[0] != NULL else 0) for x in cursor.fetchall()]

O creare una funzione di conversione cliente:

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()]

Altri suggerimenti

Mettere IFNULL(fieldname, 0) AS fieldname nell'elenco dei campi della query.

IFNULL

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

L'errore non ha senso; Python non ha "NULL", ha "Nessuno".

La cosa più pulita da fare è l'uso di SQL fondono:. SELECT COALESCE(value, 0) convertire SQL NULL a 0

Se stai ricevendo Nessuno, e si sa i valori sono interi, allora si può dire tranquillamente int(x[0] or 0).

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top