2012-01-08 27 views
9

Quiero hacer una consulta MySQL Python, tales como:MySQL Python COMO comodín

cursor = connection.cursor() 
sql = "select text \ 
     from steps \ 
     where text like '%start%'" 
cursor.execute(sql) 

Pero el% no es visto como un comodín, que está esperando una variable, supongo. Me sale un error:

TypeError: not enough arguments for format string 

Parece que nada funciona. También sería bueno si pudiera usar una variable en lugar de '% start%'

Respuesta

16

Supongo que está utilizando python db-api.

Puede intentar escaparse % como %%.

Como para pasar los parámetros que hay un número de maneras, por ejemplo:

cursor = connection.cursor() 
sql = """select text 
    from steps 
    where text like %s""" 
cursor.execute(sql, (('%' + 'start' + '%',)) 

Se puede ver ejemplos de las otras formas de paso de parámetros on this blog en la sección "Interfaz modulu". No todos ellos funcionan con todos los conectores.

+1

Escapar con %% funciona, gracias :) El uso de cadenas literales dio el mismo error. – user984003

+0

@ user984003 extraño, pero ni siquiera puedo probarlo ahora mismo. Me alegro de que ayudó de todos modos. – soulcheck

+0

@soulcheck: la sintaxis de cadena no tiene nada que ver con la interpretación de '%' (a diferencia de cómo Bourne Shell o Ruby interpretan '$', por ejemplo). Entonces '" ""% start% "" "' es exactamente igual que '"% start% "', que es lo mismo que ''% start%'' y 'r '% start%'', etc. –