?не видно в запросе SQLite через Python - PullRequest
3 голосов
/ 07 декабря 2011

В настоящее время я использую API базы данных SQLite 3 в Python 2.7. Когда я иду, чтобы выполнить запрос, например, такой:

c.execute('''select ? from music where ? like "%?%"''', (attr, attr, query))

Я получаю следующую ошибку:

sqlite3.ProgrammingError: Incorrect number of bindings supplied. The current statement uses 2, and there are 3 supplied.

Я думаю, что %?% - это то, что его отбрасывает.

1 Ответ

3 голосов
/ 07 декабря 2011

Вы неправильно поняли использование подстановки параметров.Вы можете использовать ? вместо единственного значения переменной в выражении SQL.Вы не можете использовать его вместо имен столбцов или таблиц и не можете использовать его как part для большего строкового значения.

В этом случае вы можете сделать это:

c.execute('SELECT colname FROM music WHERE other_colname LIKE ?', ('%' + query + '%'))

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...