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

Python 3.6中如何完整打印长SQL字符串?

完整显示长SQL字符串的解决办法

看起来你在打印拼接后的长SQL字符串时遇到了截断问题,我来帮你解决这个问题,顺便给你提几个SQL拼接的实用建议:

1. 去掉多余的to_string()调用,直接打印原始字符串

你拼接的sql本身就是Python字符串,完全不需要调用sql.to_string()——这步反而可能导致字符串处理异常。先试试最直接的打印方式:

print(sql)

如果终端还是只显示部分内容,大概率是你的终端(比如Windows CMD、Linux Bash)有输出宽度/行数限制。这时候可以把内容写入本地文件,就能轻松查看完整版本:

# 将SQL写入文件,方便查看完整内容
with open("full_sql_query.txt", "w", encoding="utf-8") as output_file:
    output_file.write(sql)

打开生成的full_sql_query.txt文件,就能看到完整无截断的SQL语句了。

2. 用repr()检查字符串的“真实”内容

如果怀疑字符串里有隐藏字符(比如你处理过的\xa0)或者拼接时出现了隐性截断,可以用repr()来打印字符串的原始表示,所有特殊字符、转义符都会被显式展示:

print(repr(sql))

这能帮你确认字符串是否真的被完整拼接,有没有看不见的格式问题。

额外提示:你的SQL拼接有语法错误,顺便修复下

看你拼接的SQL语句,有两个明显的语法问题:

  • ON子句的左括号没有闭合:ON (B1.Dept_ID = A.Dept_ID 这里在所有OR条件结束后少了一个)
  • Group是SQL关键字,直接使用会触发语法报错,需要用反引号(MySQL)或方括号(SQL Server)包裹,比如B1.`Group` = A.`Group`

另外,强烈建议用参数化查询代替字符串拼接,不仅能彻底避免SQL注入风险,还能解决字符串拼接带来的各种语法错误问题。举个例子(以pymysql为例):

# 用参数化SQL模板
sql_template = """
SELECT DISTINCT A.Employee_No 
FROM Employee A 
INNER JOIN Dept B1 
ON (B1.Dept_ID = A.Dept_ID
OR B1.Manager_ID = A.Manager_ID 
OR B1.Joining_Date = A.Joining_Date 
OR B1.`Group` = A.`Group`) 
WHERE B1.ACCT_YEAR = %s
AND B1.surname IN %s 
AND B1.address IN %s
"""
# 用参数传递变量,不要直接拼接
# 注意IN条件要传元组,即使只有一个元素也要加逗号
cursor.execute(sql_template, (
    str(acct_year),
    (surname,),  # 转为元组适配IN条件
    (address,)
))

内容的提问来源于stack exchange,提问作者Python Learner

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 06:59:56