2010-12-10 40 views
5

Hola Estoy tratando de buscar una tabla SQlite basada en una entrada de usuario con comodines. He intentado diferentes métodos porque no puedo hacer que funcione. Esta es la última cosa que probé, es una solución que encontré aquí en realidad, pero que podría haber cambiado en Python 3.Python + sqlite: la consulta LIKE con comodines

search = input("type name or partial name: ") 
    cur.execute("select * from contacts where name like ?", 
       ('%'+search+'%')) 

Esto produce este error en la última línea allí.

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

He intentado un montón de cosas diferentes y esto me está volviendo loco. Estoy empezando a pensar que esto no es posible sin antes leer toda la tabla en una cadena.

Respuesta

11

Parece que su problema es que ha suministrado una cadena como segundo argumento para cur.execute, cuando probablemente haya querido proporcionar una tupla de un solo elemento que contenga la cadena.

Como una cadena es una secuencia, cada carácter de la cadena se interpretará como un parámetro independiente y es por eso que ve el error "Número incorrecto de enlaces".

Probar:

cur.execute("select * from contacts where name like ?", ('%'+search+'%',)) 

Nota de la coma en la tupla, ('%'+search+'%',). Sin él, no es una tupla, solo una cadena entre paréntesis.

+0

Ya veo. Muchas gracias hombre: D –

+0

@steini Si esta respuesta funcionó para usted, por favor "aceptar". – bogeymin

Cuestiones relacionadas