如何在任何常规SQL查询中添加其他WHERE子句

时间:2019-02-01 00:52:28

标签: python sql

我正在使用Python向SQL Server编写REST,并试图向接收到的所有SQL查询添加其他WHERE条件。例如,假设我要过滤所有查询中b> 4的值。我将执行以下操作:

给出一个包含WHERE子句的SQL查询:

SELECT * FROM my_table WHERE a < 5 变成

SELECT * FROM my_table WHERE a < 5 AND b > 4

给出一个不包含WHERE子句的SQL查询:

SELECT * FROM my_table 变成

SELECT * FROM my_table WHERE b > 4

给出一个包含GROUP BY并且没有WHERE子句的SQL查询:

SELECT id FROM my_table GROUP BY id 变成

SELECT id FROM my_table WHERE b > 4 GROUP BY id

我还需要处理包含其他子句的许多组合的查询,例如LIMIT,HAVING等。

SQL中是否有一种干净的方法来处理所有查询的这种替换?还是只需要在Python中使用正则表达式和模式匹配即可实现这一目标?

1 个答案:

答案 0 :(得分:0)

没有通用的现有解决方案可以解决您的问题。您提供的示例涵盖了查询的可能空间的一部分,但是SQL允许更复杂的查询,这些查询可能仍需要其他解决方案(JOIN,UNION等)。如果可能的话,涵盖所有可能查询的通用解决方案将非常复杂。

如果您知道所提供的示例可以满足特定用例的全部需求,那么可以-使用正则表达式和模式匹配可能是个好方法。我建议将解决方案封装在一个包含查询的类中,并公开允许您添加条件并在需要时执行类似操作的操作。

这样,您可以在以后轻松扩展它,而不会影响其余代码中类的使用。