Python SQLite使用多个关键字搜索文章标题

Python SQLite使用多个关键字搜索文章标题,python,sql,sqlite,Python,Sql,Sqlite,我在用python编写这篇文章时遇到了一些麻烦,除了使用字符串格式(强烈不推荐使用)之外,我似乎无法解决这个问题 基本上,我调用函数input(),要求用户键入一些关键字(空格分隔),我需要找到所有标题包含任何关键字的帖子 例如,如果用户输入的是“pythonsqlmysql”,那么我需要找到与至少一个关键字匹配的所有帖子。在本例中,查询将是 SELECT posts.title FROM posts WHERE lower(posts.title) LIKE "%pytho

我在用python编写这篇文章时遇到了一些麻烦,除了使用字符串格式(强烈不推荐使用)之外,我似乎无法解决这个问题

基本上,我调用函数input(),要求用户键入一些关键字(空格分隔),我需要找到所有标题包含任何关键字的帖子

例如,如果用户输入的是“pythonsqlmysql”,那么我需要找到与至少一个关键字匹配的所有帖子。在本例中,查询将是

SELECT posts.title FROM posts 
    WHERE lower(posts.title) LIKE "%python%" OR 
    lower(posts.title) LIKE "%sql%" OR 
    lower(posts.title) LIKE "%mysql%";
然而,问题就在这里。关键字的数量可能会有所不同。因此,我无法编写像这样的固定SQL语句

db.execute("SELECT posts.title FROM posts WHERE posts.title LIKE ? OR posts.title LIKE ?",("%"+keyword1+"%", "%"+keyword2+"%"))
相反,我必须求助于Python中的for循环,类似于:

query = "posts.title LIKE '%" + keywords[0] + "%'"
keywords.remove(0)
for k in keywords:
    query += "OR posts.title LIKE '%" + k +"'%"

然而,这显然是不推荐的。虽然我正在做的是一个学校项目,所以它不是任务关键型的,而且我们没有针对SQL注入攻击进行评分,但我确实想知道解决这个问题的正确方法。

我想我想到了一种可能次优但更安全的方法 首先,创建查询语句,但不要向其中添加userInput:

query = "posts.title Like ? "
for i in range(len(keywords) - 1):
    query += "OR posts.title Like ?"

query = "SELECT posts.title FROM posts WHERE " + query
然后我使用sqlite API为我做到这一点:

keywords = list()
for k in keywords:
    keywords.append("%" + k + "%")
keywords = tuple(keywords)
result = db.execute(query, keywords)