You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Python3中查询SQLite3数据库含指定子串的TEXT列数据

问题1:如何在SQLite3中查询某列包含特定子串的结果?

在SQLite里找包含特定子串的行,核心用LIKE操作符配合通配符%就够了——%可以匹配任意长度的字符(包括空字符)。

举个实际例子:假设你有一张叫articles的表,content列是TEXT类型,要找出所有内容里包含"数据分析"的行,SQL语句这么写:

SELECT * FROM articles WHERE content LIKE '%数据分析%';

默认情况下,SQLite的LIKE是大小写不敏感的,%Python%和%python%会匹配到同样的结果。如果需要严格区分大小写,可以用COLLATE BINARY修饰,或者改用GLOB(GLOB默认大小写敏感):

-- 大小写敏感的LIKE写法
SELECT * FROM articles WHERE content LIKE '%Python%' COLLATE BINARY;

-- 用GLOB实现大小写敏感匹配
SELECT * FROM articles WHERE content GLOB '*Python*';

问题2:在Python3环境下,如何筛选SQLite3数据库中TEXT列包含目标子串的行?

用Python自带的sqlite3模块就能搞定,重点是要做参数化查询——别直接把字符串拼进SQL里,不然容易踩SQL注入的坑!

直接上完整代码示例,还是用articles表和content列举例:

import sqlite3

# 连接到SQLite数据库(文件不存在会自动创建)
conn = sqlite3.connect('my_database.db')
cursor = conn.cursor()

# 定义你要找的目标子串
target = "数据分析"

# 用参数化查询执行筛选,?是占位符,传参时把通配符和子串拼接好
cursor.execute("SELECT * FROM articles WHERE content LIKE ?", ('%' + target + '%',))

# 获取所有匹配的行:fetchall()拿全部结果,fetchone()拿单行,fetchmany(n)拿指定数量
matched_rows = cursor.fetchall()

# 遍历打印结果
for row in matched_rows:
    print(row)

# 别忘了关闭连接
conn.close()

如果需要大小写敏感的筛选,只要在SQL语句里加上COLLATE BINARY就行:

cursor.execute("SELECT * FROM articles WHERE content LIKE ? COLLATE BINARY", ('%' + target + '%',))

要是你用ORM框架(比如SQLAlchemy),写法会略有不同,但核心逻辑还是用LIKE配合通配符,这里先讲原生sqlite3的常用用法~

内容的提问来源于stack exchange,提问作者savagehax

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 12:32:25