Python 中数据库 LIKE 模糊查询的格式化陷阱与解决方案

宋时安
宋时安
发布时间:2026-10-11| 1人浏览过
原创

在 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()

执行逻辑解析:

  1. Python 解析阶段:解释器读取 '%%%%%s%%%%'。它将前两个 %% 转换为一个 %,后两个 %% 也转换为一个 %。中间的 %s 被替换为变量 sel 的值(例如 'test_value')。
  2. 生成的 SQL:最终生成的 SQL 语句变为 SELECT * FROM T_SECTION WHERE TITLE LIKE '%test_value%'。
  3. 数据库执行:数据库接收到该语句后,将 % 识别为 LIKE 通配符,从而正确执行模糊查询。

总结

在 Python 中执行数据库 LIKE 模糊查询时,务必注意字符串格式化字符与 SQL 通配符的冲突。通过在 Python 字符串中使用 %% 转义 SQL 的通配符 %,可以确保生成的 SQL 语句语法正确。这是处理此类问题的标准且可靠的方法。

以上就是 Python 中数据库 LIKE 模糊查询方式的详细内容,更多关于 Python 数据库操作技巧的资料请关注本站其它相关文章!

相关标签:

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。