MySql Запрос в Python НРАВИТСЯ с подстановочным знаком - PullRequest
0 голосов
/ 18 апреля 2020

Я видел этот вопрос вокруг, но ответ, который обычно дается, не работает со мной. Я пытаюсь сделать простой запрос

query_pre_company = "SELECT `name` FROM `seta`.`companies` WHERE `companies`.`name` LIKE SOUNDEX(%s) OR(`companies`.`name` LIKE %s)"
name = sheet.cell(2,2).value #from an excel sheet
name_check='%'+name+'%'
rows_count=cursor.execute(query_pre_company,[name_check])

В результате возникает ошибка

  ```query = query % tuple([db.literal(item) for item in args])
  TypeError: not all arguments converted during string formatting```

Я также попытался

rows_count=cursor.execute(query_pre_company,(name_check,))

и миллион других различных вариантов, в том числе «%% s%» непосредственно в запросе и другие

Пожалуйста, помогите Спасибо

1 Ответ

2 голосов
/ 18 апреля 2020

Поскольку у вас есть два заполнителя, вам нужно передать два параметра. Параметр для SOUNDEX() должен быть именем без добавленных подстановочных знаков.

Вы также неправильно используете SOUNDEX(). Он не возвращает шаблон lIKE, он возвращает строку кода. Вы должны также назвать это в столбце и сравнить их.

query_pre_company = """SELECT `name` 
                    FROM `seta`.`companies` 
                    WHERE SOUNDEX(`companies`.`name`) = SOUNDEX(%s) 
                    OR `companies`.`name` LIKE %s"""
name = sheet.cell(2,2).value #from an excel sheet
name_check='%'+name+'%'
rows_count=cursor.execute(query_pre_company,[name, name_check])
...