Question

Cette fonction:

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

relances:

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

Comment puis-je faire mes zéros de retour de la requête au lieu de nulls afin que je puisse résoudre ce problème? (Je modélisant les données, donc je ne peux pas ajouter «n'est pas nul » à mon instruction select.

Était-ce utile?

La solution

Vous pouvez résoudre ce problème avant qu'il arrive à Python avec une déclaration de cas dans votre requête:

CASE WHEN FIELD_NAME IS NULL THEN 0 ELSE FIELD_NAME END,

modifier commencer

D'autres variantes de SQL font différemment (pris d'autres réponses):

COALESCE(FIELD_NAME, 0)

ou

IFNULL(FIELD_NAME, 0)

modifier final

Ou le manipuler dans votre liste maquette comme si (suppose NULL est un objet prédéfini ou constant):

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

Ou créer une fonction de conversion client:

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

Autres conseils

Mettre IFNULL(fieldname, 0) AS fieldname dans la liste des champs de la requête.

vous utiliseriez IFNULL

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

L'erreur n'a pas de sens; Python n'a pas "NULL", il a "Aucun".

La propre chose à faire est d'utiliser soudent SQL. SELECT COALESCE(value, 0) pour convertir NULL SQL à 0

Si vous obtenez None, et vous connaissez les valeurs sont des nombres entiers, alors vous pouvez dire en toute sécurité int(x[0] or 0).

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top