如何在Python脚本中保留SQL格式同时去除AS后的多余空格?
解决SQLAlchemy创建视图时的空格问题
你可以通过以下几种方式实现需求:
方法1:拆分字符串拼接
直接将SQL语句拆分为两个字符串,在Python代码中保持缩进格式,同时确保生成的SQL里AS后只有一个空格:
from sqlalchemy.sql import text from app.core.config import settings # CREATE VIEWS all_recent_tasks = text( "CREATE OR REPLACE VIEW all_recent_tasks AS " f"SELECT COUNT(*) FROM tasks WHERE creation_time >= NOW() - INTERVAL '{settings.common.metrics_pause_minutes} minutes';" )
生成的SQL会变成:
DEBUG__ CREATE OR REPLACE VIEW all_recent_tasks AS SELECT COUNT(*) FROM tasks WHERE creation_time >= NOW() - INTERVAL '25 minutes';
方法2:三重引号+替换换行缩进
如果SQL语句更长,适合用三重引号编写(保留代码缩进),再通过字符串替换去掉换行和多余缩进:
from sqlalchemy.sql import text from app.core.config import settings # CREATE VIEWS all_recent_tasks = text( f"""CREATE OR REPLACE VIEW all_recent_tasks AS SELECT COUNT(*) FROM tasks WHERE creation_time >= NOW() - INTERVAL '{settings.common.metrics_pause_minutes} minutes';""".replace('\n ', ' ') )
这种方式既保留了Python代码里的缩进结构,又能将生成SQL中AS后的换行缩进替换为单个空格。
方法3:括号包裹多行字符串
利用Python的字符串隐式拼接特性,用括号包裹多行字符串,代码里保持缩进,生成的SQL自动合并为无多余空格的语句:
from sqlalchemy.sql import text from app.core.config import settings # CREATE VIEWS all_recent_tasks = text( ("CREATE OR REPLACE VIEW all_recent_tasks AS " f"SELECT COUNT(*) FROM tasks WHERE creation_time >= NOW() - INTERVAL '{settings.common.metrics_pause_minutes} minutes';") )
内容的提问来源于stack exchange,提问作者mascai
相关产品推荐
相关产品推荐

