Python MySQLdb questions (TypeError: format %d: un nombre est requis, pas de str)
Je suis en train de faire l'opération d'insertion suivante:
cursor.execute("""
insert into tree (id,parent_id,level,description,code,start,end)
values (%d,%d,%d,%s,%s,%f,%f)
""", (1,1,1,'abc','def',1,1)
)
La structure de ma table MYSQL est:
id int(255),
parent_id int(255),
level int(11),
description varchar(255),
code varchar(255),
start decimal(25,4),
end decimal(25,4)
Cependant quand je lance mon programme, j'obtiens l'erreur
" Fichier "/usr/lib/pymodules/python2.6/MySQLdb/cursors.py", la ligne 151, dans exécuter
query = query % db.littéral(args)TypeError: format %d: un nombre est requis, pas de str"
Vous devez vous connecter pour publier un commentaire.
La chaîne de format n'est pas vraiment normal Python chaîne de format. Vous devez toujours utiliser
%s
pour tous les champs.reportez-vous document officiel:
-> c'est: ici
%s
est PAS formateur, mais est un espace réservé%d
est à l'origine de l'erreur..essayez ceci :
Depuis ses données est un entier ou décimal format comment pouvez-vous utiliser %s, qui est généralement utilisé pour la chaîne de format %d ou %i doit être utilisé pour entier ou décimal des valeurs.
Chaque fois que vous avez vu que le type d'erreurs, devraient utiliser le type de fonction() pour vérifier les types de valeurs ou variables...., et va voir le type est - 'str'. Moyens python prend toutes les valeurs dans des chaînes de caractères (Par défaut, le type de données chaîne de caractères). C'est pourquoi le message d'erreur dit %d est pour les nombres, Pas pour les cordes. Envisagez donc de %s en python pour tous les types de terrain.
J'ai eu la même erreur, mais c'était pour une raison différente. Le problème était que le string inclus un '%' et que la confusion Python:
Python a interprété la "% de réduction" dans "%d", et gardé de se plaindre parce que j'étais en train de nourrir une chaîne de caractères ('abc'), n'est pas un nombre.
Il m'a fallu un ouvrage long à comprendre!
(La solution est de type %% au lieu de %.)