1

我正在使用 pysqlite 构建和搜索关键字数据库 + 对应于每个关键字的 URL 集。我搜索数据库的策略适用于 1 个关键字,因为它只需要 SQL 语句中的 1 个 WHERE 子句。就像是:

  ... WHERE lexicon.word=?", keyword) 

但是,我想将任意数量的关键字与我的数据库匹配,我相信这相当于在它们之间有几个带有 OR 语句的 WHERE 子句。因为我不知道我会得到多少关键字,所以我不能假设特定数量的 WHERE 子句并使用 API 的替换能力填充它们。

我相信我可以使用 Python 的字符串插入操作来使用我找到的每个关键字的 OR 语句来破坏 WHERE 语句。我很确定这很hacky,因为它可能导致注入攻击漏洞。

我也考虑过使用 .executemany() 函数,但它会运行许多单独的选择,而不是包含所有所需的 WHERE 子句的选择。

有没有比我提到的字符串替换方法更好的方法呢?我对 SQL 很陌生,所以请容忍我和我的无知。谢谢。

4

1 回答 1

1

SQL 查询只能有一个 WHERE 子句,但您可以使用 OR 连接多个比较,或者只使用一个 IN 表达式:

db.execute("SELECT ... WHERE lexicon.word IN (?,?,?)",
           ['Hello', 'world', 'meow'])

要构造这样的语句,您只需要一点点字符串处理:

keywords = ['Hello', 'world', 'meow']
sql = "SELECT ... WHERE lexicon.word IN (" + ",".join(["?"] * len(keywords)) + ")"
db.execute(sql, keywords)
于 2013-10-22T07:09:06.197 回答