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
相关产品推荐
相关产品推荐

