2010-06-23 33 views
27

Estoy intentando utilizar un parametrizar como la consulta con la biblioteca SQLite del pitón de la siguiente manera:parámetro Python SQLite sustitución con comodines en COMO

self.cursor.execute("select string from stringtable where string like '%?%' and type = ?", (searchstr,type)) 

pero el? en el interior del comodín no está siendo evaluado y me dejó con este error:

"sqlite3.ProgrammingError: Incorrect number of bindings supplied. The current statement uses 1, and there are 2 supplied." 

también trató de usar la versión etiquetada de consultar con:

like '%:searchstr%' y en la lista que tiene {"searchstr":searchstr...

pero cuando Hago que la consulta se ejecute, pero nunca devuelve ningún resultado, aunque poner manualmente en "like '%a%'"... devolver cientos de resultados como debería

¿Alguna sugerencia, por favor?

Respuesta

53

Las comillas protegen ? o :name de tomarse como un marcador de posición: se toman literalmente. Debe colocar los signos de porcentaje alrededor de la cadena que está pasando y usar el marcador de posición simple sin comillas. Es decir .:

self.cursor.execute(
    "select string from stringtable where string like ? and type = ?", 
    ('%'+searchstr+'%', type)) 

Nota que ni ? está entre comillas - y eso es exactamente como debe ser para que puedan ser tomadas como marcadores de posición.

+0

muchas gracias! ¡eso lo solucionó! – atcuno

+0

@huntler, siempre contento de ayudar! –

+0

¿Tiene Python un análisis tipo PHP de las variables entre comillas dobles? p.ej. '" $ var "' en PHP analizará el valor de '$ var' entre comillas. –

Cuestiones relacionadas