Estoy intentando ejecutar una consulta para buscar 3 tablas en una base de datos usando MySQL a través de Python. Cada vez que bash ejecutar la siguiente cadena como una consulta, aparece un error sobre la concatenación en la cadena.
"SELECT fileid FROM files WHERE description LIKE '%" + search + "%' OR filename LIKE '%" + search + "%' OR uploader LIKE '%" + search + "%' ORDER BY fileid DESC"
Este es el error que me da:
ValueError: unsupported format character ''' (0x27) at index 1
Si elimino el carácter que solicita, también tengo que eliminar el%, lo que impide que la consulta funcione correctamente. ¿Qué puedo hacer para solucionar esto, ya que soy bastante nuevo en Python?
Gracias kris
Parece que python está interpretando el% como un carácter de formato similar a printf. Intenta usar %%?
"SELECT fileid FROM files WHERE description LIKE '%%%s%%' OR filename LIKE '%%%s%%' OR uploader LIKE '%%%s%%' ORDER BY fileid DESC" % (search, search, search)
Puedes probar así:
SELECT fileid FROM files WHERE description LIKE '%%%%%s%%%%' OR filename LIKE '%%%%%s%%%%' OR uploader LIKE '%%%%%s%%%%' ORDER BY fileid DESC" % (search, search, search)
Mi solución:
query = """SELECT id, name FROM provice WHERE name LIKE %s""" cursor.execute(query, '%%%s%%' % name)
Creo que es una forma fácil de solucionar este problema!
Solo para usted información: probé la solución de @Pochi hoy, en Python 3.6, y por alguna razón provocó un comportamiento no esperado. Tenía dos y tres argumentos para la cadena de formato, así que al final estaba:
% (Search, Search)
Mi cadena (“búsqueda”) comenzó con una “S” superior. Recibí el mensaje de error:
ValueError: unsupported format character 'S' (0x53) at index 113
Cambié de mayúsculas a minúsculas, y el error fue:
TypeError: not enough arguments for format string
Luego puse mis argumentos dentro de doble %% al principio y al final, y funcionó. Así que mi código parecía:
"SELECT fileid FROM files WHERE description LIKE '%%search%%' OR filename LIKE '%%search%%' ORDER BY fileid DESC"
Otra solución sería la provista por @Alice Yuan. Ella acaba de duplicar el porcentaje canta, y funciona.