You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.26 21:57:23