Подстановка параметров Python SQLite с подстановочными знаками в LIKE - PullRequest
35 голосов
/ 24 июня 2010

Я пытаюсь использовать параметризованный запрос LIKE с библиотекой Python Sqlite, как показано ниже:

self.cursor.execute("select string from stringtable where string like '%?%' and type = ?", (searchstr,type))

а? внутри шаблона не проверяется, оставляя меня с этой ошибкой:

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

Я также пытался использовать помеченную версию запроса с:

like '%:searchstr%' и в списке, имеющем {"searchstr":searchstr...

но когда я это делаю, запрос запускается, но никогда не возвращает никаких результатов, даже если вручную ввести "like '%a%'"..., вернуть сотни результатов, как и должно

какие-либо предложения, пожалуйста?

1 Ответ

66 голосов
/ 24 июня 2010

Кавычки защищают либо ?, либо :name от взятия в качестве заполнителя - они воспринимаются буквально.Вам нужно разместить знаки процента вокруг передаваемой строки и использовать простой заполнитель без кавычек.Т.е.:

self.cursor.execute(
  "select string from stringtable where string like ? and type = ?",
  ('%'+searchstr+'%', type))

Обратите внимание, что ни ? не заключено в кавычки - и это именно то, что должно быть принято в качестве заполнителей.

...