Python + sqlite:带通配符的LIKE查询

Ste*_*son 7 python database sqlite

嗨,我正在尝试根据带有通配符的用户输入搜索SQlite表.我已经尝试了不同的方法,因为我无法让它发挥作用.这是我尝试的最后一件事,它实际上是我在这里找到的解决方案,但在python 3中可能已经改变了.

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

这会在那里的最后一行产生这个错误.

sqlite3.ProgrammingError: Incorrect number of bindings supplied. The current statement uses 1, and there are 5 supplied.
Run Code Online (Sandbox Code Playgroud)

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

Ben*_*mes 14

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

由于字符串是一个序列,因此字符串中的每个字符都将被解释为一个单独的参数,这就是您看到"不正确的绑定数"错误的原因.

尝试:

cur.execute("select * from contacts where name like ?", ('%'+search+'%',))
Run Code Online (Sandbox Code Playgroud)

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