我知道之前已经提出过这样的问题,但仍然无法找到我正在寻找的答案。我正在将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',因为它位于我运行脚本的文件夹中仍然会抛出一个
文件不存在
你能告诉我这里我做错了什么吗?非常感谢。
答案 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