假设我想在数据库中进行字符串前缀搜索,比如说
select * from some_table where name like 'abcde%';
abcde
实际上是一些用户输入的字符串。我如何在 Python 的 MySQLdb 中执行此操作?我可以想到两种方法:
cursor.execute("""select * from some_table where name like '%s%%'""", (some_prefix_to_search))
或
cursor.execute("""select * from some_table where name like %s""", (some_prefix_to_search + '%'))
哪一个是正确的方法?对于方法 1,MySQLdb 是否会正确地计算出 '%s%%' 是一个整体,因此它会生成 'abcde%' 而不是类似 ''abcde'%' 的东西,即将 %s 作为字符串值替换为 or没有引号?
对于方法2,输入字符串中的%是否会被认为是某种特殊值并进行转义?
谢谢。
最佳答案
第一种方法行不通; mysqldb 将再次引用您的输入值,查询将抛出语法错误。
您的第二种方法有效,因为 execute
方法只需要考虑 %
查询模板字符串中的特殊字符,以便它可以识别占位符并决定在何处插入参数。它没有理由将 %
视为参数值本身中的特殊字符,因为 %
不是可用于 SQL 注入(inject)的字符。
关于python - cursor.execute(...) 用于字符串前缀搜索,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25025309/