#!/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.
我想要它做的就是将从数据库接收的数据打印到控制台。最终我想操纵这些数据,但我只是需要查询才能正常工作。
答案 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方法将?
解释为占位符;相反,它被解释为文字?
。
因此,为了使您的查询正常工作,您必须做两件事:
%
添加到query
参数中,并将其嵌入到SQL查询中。query
参数传递给序列(单元素元组或列表)。以下是您的脚本的样子:
#!/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()