Python 中数据库 LIKE 模糊查询的格式化陷阱与解决方案
在 Python 中执行 SQL 模糊查询时,常因字符串格式化字符 `%` 与 SQL LIKE 通配符 `%` 冲突导致报错。本文解析该问题的成因,并提供通过双百分号 `%%` 转义的正确写法,确保查询语句正确生成。
问题背景:Python 格式化与 SQL 语法的冲突
在 Python 中,百分号 % 是字符串格式化的核心字符。当我们需要在 SQL 语句中使用 LIKE 进行模糊查询时,SQL 语法同样要求使用百分号 % 作为通配符(例如 '%keyword%')。这种双重语法的重叠,极易导致 Python 解释器在生成 SQL 语句时发生错误。
错误示例分析
假设我们尝试直接拼接查询语句,代码如下:
sql = "SELECT * FROM T_SECTION WHERE TITLE LIKE '%s'" % ('%%%s%%' % sel)
cur.execute(sql)
data = cur.fetchall()上述代码试图通过 Python 的字符串格式化来构建 SQL。然而,Python 解释器在处理外层 % 时,会尝试解析内部的 '%%%s%%'。由于 % 在 Python 字符串中是特殊字符,未正确转义的 % 会导致 TypeError 或格式错误,无法生成预期的 SQL 语句。
解决方案:使用双百分号转义
要解决此问题,必须在 Python 字符串中显式转义 SQL 的通配符。在 Python 的字符串格式化语法中,使用双百分号 %% 可以表示一个字面量的百分号。
正确写法
将 SQL 语句中的通配符 % 替换为 %%,同时保留用于插入动态值的 %s。具体实现如下:
sql = "SELECT * FROM T_SECTION WHERE TITLE LIKE '%%%%%s%%%%'" % sel
cur.execute(sql)
data = cur.fetchall()执行逻辑解析:
- Python 解析阶段:解释器读取
'%%%%%s%%%%'。它将前两个%%转换为一个%,后两个%%也转换为一个%。中间的%s被替换为变量sel的值(例如'test_value')。 - 生成的 SQL:最终生成的 SQL 语句变为
SELECT * FROM T_SECTION WHERE TITLE LIKE '%test_value%'。 - 数据库执行:数据库接收到该语句后,将
%识别为 LIKE 通配符,从而正确执行模糊查询。
总结
在 Python 中执行数据库 LIKE 模糊查询时,务必注意字符串格式化字符与 SQL 通配符的冲突。通过在 Python 字符串中使用 %% 转义 SQL 的通配符 %,可以确保生成的 SQL 语句语法正确。这是处理此类问题的标准且可靠的方法。
以上就是 Python 中数据库 LIKE 模糊查询方式的详细内容,更多关于 Python 数据库操作技巧的资料请关注本站其它相关文章!
免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。









