Python MySQL parametriza la consulta con% comodín en la statement LIKE

Mi consulta en la ejecución de esto falla:

cursor.execute("SELECT name FROM products WHERE rating > %s AND category like 'Automation %'", (3)); 

Porque se confunde sobre el porcentaje de uso por dos razones diferentes: como un comodín LIKE y como un parámetro en la ejecución de la base de datos MySQL de Python.

Si ejecuto esta consulta de esta manera, funciona:

 cursor.execute("SELECT name FROM products WHERE rating > 3 AND category like 'Automation %'"); 

Si ejecuto la consulta como se muestra a continuación, vuelve a funcionar:

 cursor.execute("SELECT name FROM products WHERE rating > %s AND category = 'Automation '", (3)); 

Pero eso no es una solución. Quiero usar tanto el comodín como el parámetro.

Encontré una solución alternativa, que es pasar mi comodín constante como variable:

  cursor.execute("SELECT name FROM products WHERE rating > %s AND category like %s", (3, 'Automation %')); 

Esto funciona pero necesito una solución más elegante. No quiero pasar constantes como variables. Mi statement SQL podría tener muchas declaraciones LIKE en una consulta grande.

Probablemente puedas escapar usando un % extra:

 cursor.execute("SELECT name FROM products WHERE rating > %s AND category like 'Automation %%'", (3)); 

Aparentemente, esto funciona para MySQLdb y espero que también funcione para python-mysql. . .

Trate de usar el formato. Si tienes una cadena, contra el uso% s puedes usar {}.

 sql = "SELECT name FROM products WHERE rating > {0} AND category like 'Automation %'" slq = sql.format(3) cursor.execute(sql); 

Esto es mucho mejor y el cumplimiento de las nuevas versiones de python. Y, además, puedes enfadarte con% en tu consulta.