我正在用Python编写一个REST到SQL server,并试图向我收到的所有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中使用正则表达式和模式匹配就可以做到这一点?
发布于 2019-02-01 09:15:56
对于您的问题,没有通用的现有解决方案。您提供的示例涵盖了可能的查询空间的一部分,但是SQL允许更复杂的查询,这些查询可能仍然需要不同的解决方案(联接、联合等)。如果可能的话,覆盖所有可能查询的通用解决方案将是非常复杂的。
如果您知道您给出的示例涵盖了特定用例的全部需求,那么是的-使用正则表达式和模式匹配可能是一种很好的方法。我建议将您的解决方案封装在一个类中,该类包含您的查询,并公开允许您添加条件和执行类似操作的操作。
这样,您以后就可以轻松地扩展它,而不会影响该类在代码的其余部分中的使用。
https://stackoverflow.com/questions/54471426
复制相似问题