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

Python连接SQL Server查询PB040_NG_Count表遇FROM语法错误求助

问题排查与解决方案

这个报错的根源非常直观——字符串拼接时表名和WHERE关键字之间缺少空格,导致最终生成的SQL语句变成了FROM PB040_NG_CountWHERE...,SQL Server根本无法识别这种语法混乱的内容。

你可以仔细看这段拼接代码:

" FROM PB040_NG_Count" + " WHERE read_at_2 BETWEEN '" + query_start_time + "'" + " AND CURRENT_TIMESTAMP" + " ORDER BY read_at_2 ASC"

PB040_NG_Count后面没有空格,拼接后直接跟了WHERE,完全破坏了SQL的语法结构。而你之前能用的原代码里,PC030_NG_Count后面应该是带有空格的,所以切换回去就不会出错。

修正后的代码

只需要在表名后面加一个空格即可:

cursor.execute("SELECT CAST(read_at_2 AS datetime),cell,station," + 
               " CAST(Color_NG AS float)/NULLIF(Total_Production,0)," + 
               " CAST(Angle_NG AS float)/NULLIF(Total_Production,0)," + 
               " CAST(ID_NG AS float)/NULLIF(Total_Production,0)," + 
               " CAST(OD_NG AS float)/NULLIF(Total_Production,0)," + 
               " CAST(Height_NG AS float)/NULLIF(Total_Production,0)" + 
               " FROM PB040_NG_Count " +  # 这里补充了空格
               " WHERE read_at_2 BETWEEN '" + query_start_time + "'" + 
               " AND CURRENT_TIMESTAMP" + 
               " ORDER BY read_at_2 ASC")

更安全的优化建议:使用参数化查询

另外,直接拼接字符串的写法存在SQL注入风险,而且如果query_start_time的格式有异常,也容易触发新的错误。推荐改用参数化查询来改写代码:

query = """
SELECT CAST(read_at_2 AS datetime),cell,station,
       CAST(Color_NG AS float)/NULLIF(Total_Production,0),
       CAST(Angle_NG AS float)/NULLIF(Total_Production,0),
       CAST(ID_NG AS float)/NULLIF(Total_Production,0),
       CAST(OD_NG AS float)/NULLIF(Total_Production,0),
       CAST(Height_NG AS float)/NULLIF(Total_Production,0)
FROM PB040_NG_Count
WHERE read_at_2 BETWEEN ? AND CURRENT_TIMESTAMP
ORDER BY read_at_2 ASC
"""
cursor.execute(query, (query_start_time,))

这种写法既彻底避免了拼接时的语法失误,也提升了代码的安全性和可读性。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.08 23:17:40