Python如何移除字符串多余空格缩进 解决SQL查询格式异常问题
问题原因
输出格式异常来自两个核心问题:
- 类方法内用三引号定义SQL模板时,Python会保留代码行本身的前置缩进(方法体、类体带来的多级空格),直接拼入字符串后就会导致
set、where行前出现大量多余空格 - 拼接ID列表时使用
,\n作为分隔符,换行后的ID默认顶格,和SQL子句产生错位
另外你当前输出中IN子句末尾、右括号前的多余逗号属于ID拼接逻辑的bug,标准str.join方法不会产生这类冗余符号,可以自行排查对应代码。
解决方案
方法1:用标准库textwrap.dedent自动移除公共缩进(推荐)
这是最不破坏Python代码排版的方案,textwrap.dedent会自动识别多行字符串所有行共有的前置缩进并统一移除,不需要调整你现有代码的缩进结构:
import textwrap # 在get_update_query方法中定义SQL模板时,用dedent包裹f-string即可 query_for_update = textwrap.dedent(f''' update {db_name}.{schema_name}.{self.table_name} set {self.updated_field} = {self.updated_field} where {self.key_field} in ({ids}); ''').strip()
处理后set、where行前的多余缩进会被完全清除。
方法2:三引号内SQL内容顶格书写
如果不想导入额外模块,可以直接把三引号中的SQL内容全部顶格写,避免带入代码块的前置缩进,缺点是会稍微破坏Python代码的层级排版:
query_for_update = f'''update {db_name}.{schema_name}.{self.table_name} set {self.updated_field} = {self.updated_field} where {self.key_field} in ({ids}); '''.strip()
可选优化:规整ID列表格式
如果希望换行后的ID和IN子句对齐,让SQL可读性更好,可以调整ID拼接逻辑,给换行后的ID添加统一缩进:
# 换行后添加4个空格,和IN括号后的起始位置对齐 ids_string = ',\n '.join([str(item) for item in result.id])
最终生成的SQL格式如下:
update store_1.dbo.[my_table] set [Trusted Plan] = [Trusted Plan] where [Entry No_] in (1472371, 1472375, 1472377, 1472379, 1472373 );
内容的提问来源于stack exchange,提问作者Vlad Aleshin
相关产品推荐
相关产品推荐

