2010-12-10 128 views
5

嗨 我试图根据带通配符的用户输入搜索SQlite表。我已经尝试过不同的方法,但无法使其工作。 这是我想的最后一件事,这是一个解决方案,我发现这里其实,但它可能会出现在Python 3Python + sqlite:带通配符的LIKE查询

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

这将产生上最后一行出现这个错误已经改变。

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

我尝试了很多不同的事情,这让我疯狂。如果不先将整个表格读取到字符串,我开始认为这是不可能的。

回答

11

你的问题似乎是你提供了一个字符串作为cur.execute的第二个参数,当你可能打算提供一个包含字符串的单元素元组。

由于字符串是一个序列,字符串中的每个字符将被解释为一个单独的参数,这就是为什么你看到“错误的绑定次数”错误。

尝试:

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

注意逗号元组,('%'+search+'%',)。没有它,它不是一个元组,而只是一个括号中的字符串。

+0

我明白了。非常感谢:D – 2010-12-10 14:47:49

+0

@ steini如果这个答案适合你,请“接受”它。 – bogeymin 2010-12-10 14:55:56