如何在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
相关产品推荐
相关产品推荐

