Подтвердить что ты не робот

Подстановка Python SQLite с помощью подстановочных знаков в LIKE

Я пытаюсь использовать параметризованный запрос 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%'"... вернуть сотни результатов, как это должно быть

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

4b9b3361

Ответ 1

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

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

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