2013-02-12 2 views
3
#!/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() 

Retuns ошибку:Python Ошибка при поиске sqlite3 БД При

[email protected]:~$ 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. 

Все, что я хочу, чтобы это сделать, чтобы распечатать данные, которые он получает из базы данных на консоль. В конце концов я хотел бы манипулировать этими данными, но мне просто нужен запрос для правильной работы.

ответ

2

Здесь есть две проблемы. Во-первых, параметр должен быть последовательностью - Python интерпретирует его как список из четырех символов, а не четырехзначную строку.

Во-вторых, заполнителем должен быть весь элемент, а не кавычки. Вам нужно добавить процент символов себя:

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

Это работало отлично. Спасибо, что помогли мне. – archangelic

0

Вам необходимо пройти кортеж к cursor.execute. Попробуйте (query,) вместо query.

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

Во-первых, второй параметр метода execute должна быть последовательность, и вы передаете строку (которая интерпретируется как последовательность символов) , поэтому он говорит: ... and there are 4 supplied.

Во-вторых, цитаты вокруг аргумента вашего сравнения LIKE не позволяют методу выполнения интерпретировать ? в качестве заполнителя; вместо этого он интерпретируется как буквальный ?.

Таким образом, для вашего запроса, чтобы правильно работать, вы должны сделать две вещи:

  1. Добавьте % вашему в query аргумент, InstEd из них в возможность размещения запроса SQL.
  2. Передайте аргумент 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() 
Смежные вопросы