使用 pyodbc 批量插入 SQL 服务器 table:找不到文件

BULK INSERT into SQL Server table using pyodbc: cannot find file

我知道以前有人问过这种问题,但仍然找不到我要找的答案。我正在将 csv 文件批量插入到 SQL 服务器 table 但我收到如下所示的错误:

我的代码:

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 Server Driver][SQL Server]Cannot bulk load because the file "C:\Users\kdalal\callerx_project\caller_x\new_file_name.csv" could not be opened. Operating system error code 3(The system cannot find the path specified.). (4861) (SQLExecDirectW)')

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

file does not exists

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

BULK INSERT 语句在 SQL 服务器计算机上执行,因此文件路径必须可从该计算机访问。你得到 "The system cannot find the path specified" 因为路径

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

您的机器上的路径,而不是SQL服务器机器上的路径。

由于您将数据帧的内容转储到 CSV 文件,因此您可以简单地使用 df.to_sql 将内容直接推送到 SQL 服务器,而无需中间 CSV 文件。要提高性能,您可以告诉 SQLAlchemy 使用 pyodbc 的 fast_executemany 选项,如相关问题

中所述