我正在使用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中使用正则表达式和模式匹配即可实现这一目标?
答案 0 :(得分:0)
没有通用的现有解决方案可以解决您的问题。您提供的示例涵盖了查询的可能空间的一部分,但是SQL允许更复杂的查询,这些查询可能仍需要其他解决方案(JOIN,UNION等)。如果可能的话,涵盖所有可能查询的通用解决方案将非常复杂。
如果您知道所提供的示例可以满足特定用例的全部需求,那么可以-使用正则表达式和模式匹配可能是个好方法。我建议将解决方案封装在一个包含查询的类中,并公开允许您添加条件并在需要时执行类似操作的操作。
这样,您可以在以后轻松扩展它,而不会影响其余代码中类的使用。