SQL Server调用Python读取远程共享Excel报文件不存在问题排查
问题1:FileNotFoundError(\6被转义为\x06)的解决方法
报错核心原因是两层字符串解析的转义冲突:写在@script参数里的Python代码会被原封不动传给Python运行时解析,而Python普通字符串默认将反斜杠\识别为转义字符,路径中\6符合Python八进制转义规则(反斜杠+0-7范围数字),被解析为ASCII控制符\x06,最终生成的路径完全错误,自然无法找到文件。
三种解决方法任选其一即可:
- 方法1(最简便):给路径字符串加Python原始字符串标记
r,让Python不处理反斜杠转义,修改后代码如下:
EXECUTE sp_execute_external_script @language = N'Python', @script = N'import pandas as pd df = pd.read_excel(r"\\192.168.7.9\Import\6\strtinsertinput (4)-953aee07-ca14-4213-a91e-ab0b0f7f3db2.xlsx", sheet_name = "Sheet1")'; GO
- 方法2:把路径里所有反斜杠替换为正斜杠,Python原生支持Windows平台下的正斜杠路径,完全不存在转义问题:
EXECUTE sp_execute_external_script @language = N'Python', @script = N'import pandas as pd df = pd.read_excel("//192.168.7.9/Import/6/strtinsertinput (4)-953aee07-ca14-4213-a91e-ab0b0f7f3db2.xlsx", sheet_name = "Sheet1")'; GO
- 方法3:在普通Python字符串里把所有反斜杠双写做转义,让Python解析后得到正确的单反斜杠路径,该写法冗余度高,不推荐使用:
EXECUTE sp_execute_external_script @language = N'Python', @script = N'import pandas as pd df = pd.read_excel("\\\\192.168.7.9\\Import\\6\\strtinsertinput (4)-953aee07-ca14-4213-a91e-ab0b0f7f3db2.xlsx", sheet_name = "Sheet1")'; GO
转义问题修复后如果仍报权限错误,需要给SQL Server Launchpad服务的运行账号(或自定义配置的外部脚本代理账号)授予该共享路径的对应读/写权限。OPENROWSET能读取成功是因为它走SQL Server服务本身的权限体系,和外部脚本的运行权限不是同一套。
问题2:SQL Server内嵌Python是否支持读写远程服务器共享路径
完全支持,只需要满足两个前提:
- 必须使用完整UNC路径(即
\\服务器IP\共享名\文件路径格式),不要使用用户会话下映射的网络盘符(比如Z:\xxx.xlsx),服务运行的会话上下文不会保留用户手动映射的盘符配置。 - 运行外部Python脚本的身份(SQL Server Launchpad服务账号/配置的外部脚本代理账号),对远程共享文件夹拥有对应的读写权限。
内容的提问来源于stack exchange,提问作者ahmed barbary
相关产品推荐
相关产品推荐

