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

如何用Python在SQLite数据库中查找含指定关键词的行?

解决Python操作SQLite查找含关键词记录的问题

嗨,我来帮你搞定这个查询问题~你遇到的问题主要有两个:一是最初的SQL语句没加筛选条件,二是遍历查询结果时对数据结构判断有误。下面给你两种正确的实现方式:

方法一:用SQL语句直接在数据库层面筛选(推荐)

这种方法效率更高,尤其是当你的Corpus表数据量很大的时候,让数据库帮你做筛选比把所有数据拉到Python里处理要快得多。而且一定要用参数化查询,避免SQL注入风险,不要直接把关键词拼到SQL字符串里。

import sqlite3 as lite

con = lite.connect("corpus.db")
c = con.cursor()

keyword = input("Which keyword do you wish to find in the corpus? ")
# 使用LIKE和通配符%匹配包含关键词的内容,用?作为参数占位符
c.execute("SELECT Content FROM Corpus WHERE Content LIKE ?", ('%' + keyword + '%',))

# 获取所有匹配的结果
results = c.fetchall()
for text_tuple in results:
    # 每个结果是元组,取第一个元素就是Content的内容
    print(text_tuple[0])

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

解释一下:

  • LIKE ?里的?是SQLite的参数占位符,后面的元组('%' + keyword + '%',)是要替换的值,%是通配符,代表任意长度的任意字符,这样就能匹配包含关键词的文本了。
  • 最后记得关闭数据库连接,养成好习惯~

方法二:修正Python遍历的判断逻辑(适合需要额外处理数据的场景)

如果你一定要先把所有数据拉到Python里再筛选,那得修正你的判断条件,因为fetchall()返回的是元组的列表,每个元组里才是你要的Content字符串。

import sqlite3 as lite

con = lite.connect("corpus.db")
c = con.cursor()

keyword = input("Which keyword do you wish to find in the corpus? ") # 比如输入"camera"
c.execute("SELECT Content FROM Corpus")
content = c.fetchall()

for text_tuple in content:
    # 取元组的第一个元素(也就是Content的字符串),再判断关键词是否在里面
    if keyword in text_tuple[0]:
        print(text_tuple[0])

con.close()

你之前的代码里if keyword in text是在检查关键词是否是元组的成员,而不是检查元组里的字符串包含关键词,所以才会没有输出哦~

两种方法对比

  • 方法一(SQL筛选):效率高,适合大数据量,代码更简洁,还能避免SQL注入。
  • 方法二(Python筛选):适合需要对所有文本做额外处理的场景,但数据量大时会很慢。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 10:17:39