为什么SQLParse移除注释后会截断剩余的SQL语句?
问题原因
你遇到的截断问题是SQL注释规则和sqlparse的注释删除逻辑共同导致的:
- SQL的单行注释以
--为标识,会生效到当前行结束,同一行内--之后的所有内容都会被判定为注释 - 你提供的原始SQL第一行中,
SELECT a , b FROM c WHERE d = '2021-01-01'这段内容完全跟在-- AS -- DD -- CC之后,属于单行注释的覆盖范围,开启strip_comments=True后会被整体删除 - 接下来两行均为
--开头的纯注释行,也会被完全删除,最终仅剩下未被注释覆盖的AND e = '2021-02-03'部分输出。
解决方法
将SQL语句和单行注释拆分到不同行即可,示例代码如下:
import sqlparse query = '''/* lala */ -- AS -- DD -- CC SELECT a , b FROM c WHERE d = '2021-01-01' --comment 1 --comment2 AND e = '2021-02-03' ''' print(sqlparse.format(query, strip_comments = True))
运行后输出符合预期:SELECT a , b FROM c WHERE d = '2021-01-01' AND e = '2021-02-03'
内容的提问来源于stack exchange,提问作者Lei
相关产品推荐
相关产品推荐

