web-dev-qa-db-fra.com

MySQLdb Python insérer% d et% s

Précurseur:

MySQL Table created via:
CREATE TABLE table(Id INT PRIMARY KEY NOT NULL, Param1 VARCHAR(50))

Une fonction:

.execute("INSERT INTO table VALUES(%d,%s)", (int(id), string)

Production:

TypeError: %d format: a number is required, not a str

Je ne sais pas ce qui se passe ici ni pourquoi je ne suis pas en mesure d'exécuter la commande. Ceci utilise MySQLdb en Python. .execute est exécuté sur un objet curseur.

ÉDITER:

La question: Problèmes Python MySQLdb (TypeError: format% d: un nombre est requis, pas str) dit que vous devez utiliser %s pour tous les champs. Pourquoi est-ce possible? Pourquoi cette commande fonctionne-t-elle?

.execute("INSERT INTO table VALUES(%s,%s)", (int(id), string)
15
Matt Stokes

Comme la requête entière doit être au format chaîne pendant l'exécution de la requête, donc %s Devrait être utilisé...

Une fois la requête exécutée, la valeur entière est conservée.

Votre ligne devrait donc l'être.

.execute("INSERT INTO table VALUES(%s,%s)", (int(id), string))

L'explication est ici

23
noobmaster69

La chaîne de format n'est pas vraiment une chaîne de format Python. Vous devez toujours utiliser% s pour tous les champs

6
lwzhuo