J'essaie d'exécuter une requête pour rechercher 3 tables dans une base de données en utilisant MySQL via Python. Chaque fois que j'essaie d'exécuter la chaîne suivante en tant que requête, cela me donne une erreur concernant la concaténation dans la chaîne.
"SELECT fileid FROM files WHERE description LIKE '%" + search + "%' OR filename LIKE '%" + search + "%' OR uploader LIKE '%" + search + "%' ORDER BY fileid DESC"
C'est l'erreur que ça me donne:
ValueError: unsupported format character ''' (0x27) at index 1
Si je supprime le caractère demandé, je dois également supprimer le%, ce qui empêche la requête de fonctionner correctement. Que puis-je faire pour résoudre ce problème, puisque je suis plutôt nouveau dans Python.
Merci, Kris
Il semble que python interprète le% en tant que caractère de format printf. Essayez d'utiliser %%?
"SELECT fileid
FROM files
WHERE description LIKE '%%%s%%'
OR filename LIKE '%%%s%%'
OR uploader LIKE '%%%s%%'
ORDER BY fileid DESC" % (search, search, search)
Juste pour vous info: J'ai essayé la solution de @Pochi aujourd'hui, en Python 3.6, et pour une raison quelconque, cela a provoqué un comportement inattendu. J'avais deux et trois arguments pour la chaîne de format, donc à la fin c'était:
% (Search, Search)
Ma chaîne ("recherche") a commencé par un "S" supérieur. J'ai eu le message d'erreur:
ValueError: unsupported format character 'S' (0x53) at index 113
J'ai changé les majuscules en minuscules et l'erreur était:
TypeError: not enough arguments for format string
Ensuite, je viens de mettre mes arguments dans double %% au début et à la fin, et cela a fonctionné. Donc, mon code ressemblait à:
"SELECT fileid
FROM files
WHERE description LIKE '%%search%%'
OR filename LIKE '%%search%%'
ORDER BY fileid DESC"
Une autre solution serait celle fournie par @ Alice Yuan. Elle vient de doubler le pourcentage chante, et ça marche.
Ma solution:
query = """SELECT id, name FROM provice WHERE name LIKE %s"""
cursor.execute(query, '%%%s%%' % name)
Je pense que c'est un moyen facile de résoudre ce problème!
vous pouvez essayer comme ça:
SELECT fileid
FROM files
WHERE description LIKE '%%%%%s%%%%'
OR filename LIKE '%%%%%s%%%%'
OR uploader LIKE '%%%%%s%%%%'
ORDER BY fileid DESC" % (search, search, search)