使用pyodbc将BULK INSERT插入SQL Server表:找不到文件

时间:2018-02-13 19:48:34

标签: python sql-server python-3.x pyodbc

我知道之前已经提出过这样的问题,但仍然无法找到我正在寻找的答案。我正在将csv文件批量插入到SQL Server表中,但我收到的错误如下所示:

我的代码:

df_output.to_csv('new_file_name.csv', sep=',', encoding='utf-8')
conn = pyodbc.connect(r'DRIVER={SQL Server}; PORT=1433; SERVER=Dev02; DATABASE=db;UID='';PWD='';')
curr = conn.cursor()
print("Inserting!")
curr.execute("""BULK INSERT STG_CONTACTABILITY_SCORE
               FROM 'C:\\Users\\kdalal\\callerx_project\\caller_x\\new_file_name.csv'
               WITH
               (
                 CODEPAGE = 'ACP',
                 FIRSTROW = 2,
                 FIELDTERMINATOR = ',',
                 ROWTERMINATOR = '\n'
                 );""")
conn.commit()

错误:

  

pyodbc.ProgrammingError:('42000','[42000] [Microsoft] [ODBC SQL   服务器驱动程序] [SQL Server]无法批量加载,因为该文件   “C:\用户\ kdalal \ callerx_project \ caller_x \ new_file_name.csv”   不能打开。操作系统错误代码3(系统不能   找到指定的路径。)。 (4861)(SQLExecDirectW)')

'new_file_name.csv'位于指定的路径中。我尝试将路径更改为'new_file_name.csv',因为它位于我运行脚本的文件夹中仍然会抛出一个

  

文件不存在

你能告诉我这里我做错了什么吗?非常感谢。

1 个答案:

答案 0 :(得分:3)

BULK INSERT语句在SQL Server计算机上执行,因此必须可以从该计算机访问文件路径。你得到“系统找不到指定的路径”,因为路径

C:\\Users\\kdalal\\callerx_project\\caller_x\\new_file_name.csv

您的计算机上的路径,而不是SQL Server计算机。

由于您要将数据框的内容转储到CSV文件,因此您只需使用df.to_sql将内容直接推送到SQL Server而无需中间CSV文件。为了提高性能,您可以告诉SQLAlchemy使用pyodbc的fast_executemany选项,如相关问题中所述

Speeding up pandas.DataFrame.to_sql with fast_executemany of pyODBC