我一直在努力完成以下任务:
我的 python 应用程序与 sql server 有一个活动连接,我想执行批量插入操作,将特定文件中的数据插入到我的数据库中。 当我直接从 sql server 执行此操作时,它工作正常,但使用 python 我总是收到有关转义字符“/”的消息 - 它是 Windows 机器。
我无法弄清楚如何完成这件事:我尝试过: a) 将 '/' 替换为 '//' 但随后 sql server 崩溃了 b) 创建一个存储过程并在 c.execute 中引用它,但它也不起作用 c) 将 '/' 替换为 '' - 那么 sql 无法打开文件 d) 使用原始字符串 r'' 创建一个变量并将其作为参数传递到 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()
解决该问题的方法应该是什么?我不想逐行读取文件,因为我想上传的每个文件中有数十万行。
我得到的错误:
SyntaxError: (unicode error) 'unicodeescape' codec can't decode bytes in position 36-37: truncated \UXXXXXXXX escape
您能提出一个解决方案吗?
提前感谢您的任何提示
也许您可以使用原始字符串文字作为文件路径,在单引号前添加 r 前缀:
FROM r'C:\Users\pllmkd\Desktop\test.txt'
它可以防止反斜杠字符被读取为转义字符。
您遇到的错误是与字符串文字相关的 Python 特定错误。
在Python中,反斜杠
\
是字符串中的转义字符。当 Python 字符串中有序列 \U
时,它需要遵循 Unicode 转义序列,这就是为什么您会看到有关截断的 \UXXXXXXXX
转义的错误消息。
conn = pyodbc.connect(f'DRIVER={driver};SERVER={server};DATABASE={database};UID={user};PWD={password}')
c = conn.cursor()
c.execute('''
BULK INSERT Namen
FROM r'C:\Users\pllmkd\Desktop\test.txt'
WITH (
FIELDTERMINATOR = ',')
''')
c.commit()
c.close()
conn.close()
或者您可以对路径中的每个反斜杠使用双反斜杠
\\
FROM 'C:\\Users\\pllmkd\\Desktop\\test.txt'