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

7 投票
1 回答
9567 浏览
提问于 2025-04-16 08:21

你好!我正在尝试根据用户输入和通配符来搜索一个SQLite表格。我试过不同的方法,但就是无法让它正常工作。

这是我最后尝试的一个方法,实际上是我在这里找到的解决方案,但在Python 3中可能有所变化。

    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.

我尝试了很多不同的办法,这让我快要疯了。我开始觉得,如果不先把整个表格读成一个字符串,这可能根本不行。

1 个回答

19

你的问题似乎是你在调用 cur.execute 的时候,把一个字符串当作第二个参数传了进去,其实你应该传的是一个只包含这个字符串的元组。

因为字符串是一个字符序列,所以字符串里的每个字符都会被当作一个单独的参数来处理,这就是你看到“绑定数量不正确”的错误原因。

你可以试试:

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

注意元组里的逗号,('%'+search+'%',)。如果没有这个逗号,它就不是元组了,而只是一个带括号的字符串。

撰写回答