通过Python查询Azure SQL转换日期报错,Excel连接同语句正常
问题排查与解决
问题根源
报错不是Azure SQL的语法问题,是Python字符串解析错误。你用单引号包裹整个SQL语句时,内部的'01-'会提前闭合外层单引号,导致Python把01当成带前导零的十进制整数——这在Python中是不允许的(前导零整数需加0o前缀表示八进制,但显然这不是你的意图)。而Excel连接时不存在Python的字符串解析逻辑,所以SQL能正常执行。
修复方案
以下三种方式任选其一即可:
方式1:用双引号包裹整个SQL语句
将外层单引号替换为双引号,内部保留单引号:
DF=pd.read_sql("SELECT CONVERT(VARCHAR(MAX), candidate,2) AS candidate,CONVERT(datetime,'01-'+Month,23) AS Month FROM [workspace].[abctbldata]",conn)
方式2:用三引号包裹整个SQL语句
三引号(单/双均可)可容纳内部的单/双引号,适合复杂SQL场景:
DF=pd.read_sql('''SELECT CONVERT(VARCHAR(MAX), candidate,2) AS candidate,CONVERT(datetime,'01-'+Month,23) AS Month FROM [workspace].[abctbldata]''',conn)
方式3:转义内部的单引号
在内部单引号前加反斜杠,告知Python这是字符串的一部分而非闭合符:
DF=pd.read_sql('SELECT CONVERT(VARCHAR(MAX), candidate,2) AS candidate,CONVERT(datetime,\'01-\'+Month,23) AS Month FROM [workspace].[abctbldata]',conn)
验证
修复后重新运行代码,Python会正确解析完整SQL语句并发送给Azure SQL执行,结果将与Excel连接时一致。
内容的提问来源于stack exchange,提问作者technical
相关产品推荐
相关产品推荐

