MySql 在 Python LIKE 中使用通配符查询

MySql Query in Python LIKE with Wildcard

我看到过这个问题,但通常给出的答案对我不起作用。 我正在尝试做一个简单的查询

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%”等

请帮忙 谢谢

由于你有两个占位符,你需要传递两个参数。 SOUNDEX() 的参数应该是没有添加通配符的名称。

您也没有正确使用 SOUNDEX()。它不是 return 一个 lIKE 模式,它 return 是一个代码字符串。你也需要在列上调用它并比较它们。

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])