从 sql server 批量插入作为 python 中的查询

问题描述 投票:0回答:2

我一直在努力完成以下任务:

我的 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

您能提出一个解决方案吗?

提前感谢您的任何提示

python sql bulkinsert
2个回答
0
投票

也许您可以使用原始字符串文字作为文件路径,在单引号前添加 r 前缀:

FROM r'C:\Users\pllmkd\Desktop\test.txt'

它可以防止反斜杠字符被读取为转义字符。


0
投票

您遇到的错误是与字符串文字相关的 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'
© www.soinside.com 2019 - 2024. All rights reserved.