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

使用pymssql查询时如何避免“EOL while scanning string literal”语法错误

解决pymssql中SQL查询的SyntaxError: EOL while scanning string literal错误

这个错误根本不是SQL语法的问题,而是你在Python里处理SQL字符串的方式不对!因为Python对多行字符串或者引号嵌套有严格的规则,而你的SQL语句在原生SQL环境能跑,说明SQL本身没问题,问题出在把SQL放到Python字符串里的写法上。

常见的错误原因和解决方法:


1. 多行SQL直接换行,未做处理

如果你的SQL是多行编写的,比如这样的错误写法:

# 错误:普通字符串直接换行,Python会认为字符串提前结束
query = 'SELECT column1, column2
FROM my_table
WHERE column3 = 100'

Python会把换行符当成字符串的结束标记,直接抛出EOL错误。

正确写法:用三引号(''' 或 """)包裹多行字符串,这是Python处理多行文本最便捷的方式:

query = '''
SELECT column1, column2
FROM my_table
WHERE column3 = 100
'''

2. 字符串里的引号嵌套冲突

如果你的SQL语句里用到了单引号(比如匹配字符串类型的字段值),而你在Python里也用单引号包裹整个SQL,就会导致引号提前闭合:

# 错误:单引号嵌套导致字符串提前结束
query = 'SELECT * FROM users WHERE username = 'Alice''

这里Python会把'SELECT * FROM users WHERE username = '当成一个完整字符串,后面的Alice''就会触发语法错误。

解决方法:

  • 外层用双引号包裹SQL,内层保留单引号:
query = "SELECT * FROM users WHERE username = 'Alice'"
  • 或者用转义符\转义SQL里的单引号:
query = 'SELECT * FROM users WHERE username = \'Alice\''

3. 用反斜杠续行(不推荐,但可用)

如果你不想用三引号,也可以在每行末尾加反斜杠\,告诉Python这行字符串还未结束:

query = 'SELECT column1, column2 \
FROM my_table \
WHERE column3 = 100'

不过这种方式容易出错(比如反斜杠后面不小心加了空格),更推荐使用三引号的写法。

验证小技巧

你可以先把Python里的query变量打印出来,看看输出的SQL是不是和你在SQL环境里运行的完全一致。如果打印出来的SQL有截断、引号缺失等问题,那就是字符串处理环节出了问题。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 07:48:35