gpt4 book ai didi

python - 使用可变数量的 WHERE 子句来匹配任意数量的关键字 pysqlite

转载 作者:太空宇宙 更新时间:2023-11-03 18:45:58 25 4
gpt4 key购买 nike

我正在使用 pysqlite 构建和搜索关键字数据库以及与每个关键字对应的 URL 集。我的数据库搜索策略使用 1 个关键字效果很好,因为它只需要 SQL 语句中的 1 个 WHERE 子句。类似于:

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

但是,我想将任意数量的关键字与我的数据库相匹配,我相信这相当于在它们之间有多个带有 OR 语句的 WHERE 子句。由于我不知道将给出多少个关键字,因此我无法假设特定数量的 WHERE 子句并使用 API 的替换功能来填充它们。

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

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

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

最佳答案

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)

关于python - 使用可变数量的 WHERE 子句来匹配任意数量的关键字 pysqlite,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19507481/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com