在 sqlite3/python 中递归过滤行

我有一个来自外部源的 sqlite 查询,其中包含未知数量的 WHERE 子句。子句的类型数量有限(我提前知道它们可以是什么类型),但是在我实际收到查询之前,每种类型有多少是未知的。


在我真正解决之前,我认为这将是一个容易解决的问题。


我可以想到几个可能的解决方案。我可以为每种类型的选择指定一个带有许多不同 WHERE 子句的长 SELECT 查询,并在1=1没有足够的选择来填充它们时填充它们。但这是丑陋的代码,当需要的空间多于给定的空间时反应不佳。


我不能在纯 SQL 中执行此操作,而是使用递归 Python 函数迭代查询并连续过滤结果。这是无法成功运行的伪代码:


queries = (list of queries from external source)

return filter_results(conn.cursor(), (database), queries)


def filter_results(cursor, results, queries):

    if len(queries) == 0:

        return results_so_far

    cursor.execute("SELECT * FROM {} WHERE {}".format(results, queries.pop(0)))

    results = cursor.fetchall()

    return filter_results(cursor, results, queries)

如您所见,我对将数据库传递给函数感到很困惑,而且我很清楚我无法将 SQL 查询传递给cursor.fetchall(). 在某些时候,我要么尝试在 Python 中模拟 SQL,要么将自己暴露在 SQL 注入中。


我要么严重过度考虑这一点,要么试图解决无法解决的问题。我高度怀疑是前者。对此的正确方法是什么?


哈士奇WWW
浏览 158回答 1
1回答

慕桂英4014372

答案是使用查询构建工具。在这种情况下, PyPika是正确的工具。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python