Bonjour,
J'utilise sqlite3 et non mysql, mais je pense que les 2 pilotes Python devraient demander la même syntaxe.
Si c'est le cas, je pense qu'il y a une confusion entre 2 types différents de passage de paramètres dans la chaine de requête.
1- cas général d'une chaine de caractères:
"TRUNCATE TABLE %s;" % ("matable",) ce qui donnera: "TRUNCATE TABLE matable;"
2- Cas des paramètres passés dans execute (extrait de la doc => execute(sql[, parameters])):
ces paramètres, optionnels, remplaceront les '?' de la chaine de requête.
Voilà un exemple dans lequel les 2 modes de passage de paramètres sont présents:
cur.execute("""SELECT * FROM "%s" WHERE %s=?;""" % (table, champ), (valeur,))
Dans cette chaine de requête, les 2 '%s' seront remplacés respectivement par les valeurs de table et de champ, et le '?' sera remplacé par la valeur passée en paramètre de execute.
D'expérience (mais ce n'est pas bien expliqué dans la doc):
- les paramètres passés comme 2ème argument dans execute sont à utiliser pour des valeurs,
- les noms de tables ou de champs sont à passer avec '%s'.
Partager