搜索sqlite3数据库时出现Python错误

时间:2013-02-12 23:50:43

标签: python sqlite

#!/usr/bin/python
import sqlite3

conn = sqlite3.connect("/home/michael/Dropbox/lagniappe/database.db")

cursor = conn.cursor()

query = raw_input('Search for a title:')

cursor.execute("SELECT * FROM nerd WHERE title LIKE '%?%';", query)

print cursor.fetchall()

重新调整错误:

michael@piplup:~$ python sqlite.py 
Search for a title:test
Traceback (most recent call last):
  File "sqlite.py", line 10, in <module>
    cursor.execute("SELECT * FROM nerd WHERE title LIKE '%?%';", query)
sqlite3.ProgrammingError: Incorrect number of bindings supplied. The current statement uses 0, and there are 4 supplied.

我想要它做的就是将从数据库接收的数据打印到控制台。最终我想操纵这些数据,但我只是需要查询才能正常工作。

3 个答案:

答案 0 :(得分:2)

这里有两个问题。首先,该参数应该是一个序列 - Python将其解释为四个字符的列表,而不是四个字符的字符串。

其次,占位符必须是整个元素,而不是引号。您需要自己添加百分比字符:

query = raw_input('Search for a title:')
query = '%' + query + '%'
cursor.execute("SELECT * FROM nerd WHERE title LIKE ?", (query,))

答案 1 :(得分:0)

您需要将元组传递给cursor.execute。请尝试(query,)而不是query

cursor.execute("SELECT * FROM nerd WHERE title LIKE '%?%';", (query,))

答案 2 :(得分:0)

首先,execute方法的第二个参数应该是一个序列,并且您传递的是一个字符串(被解释为一系列字符),这就是为什么它说... and there are 4 supplied. < / p>

其次,围绕LIKE比较参数的引号会阻止execute方法将?解释为占位符;相反,它被解释为文字?

因此,为了使您的查询正常工作,您必须做两件事:

  1. %添加到query参数中,并将其嵌入到SQL查询中。
  2. query参数传递给序列(单元素元组或列表)。
  3. 以下是您的脚本的样子:

    #!/usr/bin/python
    import sqlite3
    conn = sqlite3.connect("/home/michael/Dropbox/lagniappe/database.db")
    cursor = conn.cursor()
    query = '%%%s%%' % raw_input('Search for a title:') # puts the input between %
    cursor.execute("SELECT * FROM nerd WHERE title LIKE ?;", (query,)) # passes the query as a tuple
    print cursor.fetchall()