Python连接SQL Server执行BULK INSERT遇转义错误求助
解决Python执行SQL Server BULK INSERT的转义字符错误
错误原因
你的报错源于Python解析字符串时,将路径中的\U识别为Unicode转义序列(要求后续跟8位十六进制数),但\Users里的\U无法匹配完整转义格式,导致解码失败。
可行解决方案
方案1:使用Python原始字符串
在SQL语句的三重引号前添加r,让Python跳过对字符串内转义字符的解析:
conn = pyodbc.connect(f'DRIVER={driver};SERVER={server};DATABASE={database};UID={user};PWD={password}') c = conn.cursor() # 关键:在三重引号前加r c.execute(r''' BULK INSERT Namen FROM 'C:\Users\pllmkd\Desktop\test.txt' WITH ( FIELDTERMINATOR = ',') ''') c.commit() c.close() conn.close()
方案2:替换为双反斜杠路径
将路径中的单个反斜杠\替换为双反斜杠\\,Python会自动解析为单个反斜杠:
conn = pyodbc.connect(f'DRIVER={driver};SERVER={server};DATABASE={database};UID={user};PWD={password}') c = conn.cursor() c.execute(''' BULK INSERT Namen FROM 'C:\\Users\\pllmkd\\Desktop\\test.txt' WITH ( FIELDTERMINATOR = ',') ''') c.commit() c.close() conn.close()
方案3:使用正斜杠作为路径分隔符
SQL Server支持正斜杠/作为路径分隔符,直接替换即可:
conn = pyodbc.connect(f'DRIVER={driver};SERVER={server};DATABASE={database};UID={user};PWD={password}') c = conn.cursor() c.execute(''' BULK INSERT Namen FROM 'C:/Users/pllmkd/Desktop/test.txt' WITH ( FIELDTERMINATOR = ',') ''') c.commit() c.close() conn.close()
额外注意事项
如果以上方法仍无效,需检查SQL Server服务账户是否有目标文件的读取权限(即便你在SSMS中执行正常,Python连接所用账户可能不同),同时确认文件路径为绝对路径且文件实际存在。
内容的提问来源于stack exchange,提问作者Calle
相关产品推荐
相关产品推荐

