python - cursor.execute(...) 用于字符串前缀搜索

标签 python mysql mysql-python

假设我想在数据库中进行字符串前缀搜索,比如说

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/

相关文章:

python - 使用 couchdb 进行 urllib2 异常处理

Python 列表字典 - 返回具有唯一值的键

python - 如何在子类的 __init__() 中附加另一个参数?

mysql - 错误 1878 (HY000) : Temporary file write failure in mysql

python - 如何从 Python 中的子进程获取返回码和输出?

mysql - IMDBpy制作的SQL电影数据库说明

php - 如何从表格中计算高度分数

python - _mysql_exceptions.ProgrammingError : (1064, “你的 SQL 语法有错误;)

python cursor.execute 返回空

Python MySQLdb/mysql 客户端 : bind a named set (or tuple or list) as parameter