BULK INSERT错误代码3:系统找不到指定的路径

BULK INSERT error code 3: The system cannot find the path specified

我正在尝试使用 pyodbc 将本地文件批量插入到远程 MS_SQL 数据库中。我能够连接到数据库,并且能够连接到 INSERT INTO 表,就像我以前做过的那样。我遇到问题的地方是 BULK INSERT.

我正在使用 BULK INSERT 来加快我的 INSERT 进程。

代码如下所示:

statement = """ BULK INSERT BulkTable FROM 'C:\Users\userName\Desktop\Folder\Book1.csv' WITH (
       FIRSTROW=2,
       FIELDTERMINATOR=',',
       ROWTERMINATOR = '\n'
);
"""
cursor.execute(statement)
cnxn.commit()

此代码产生此错误:

Traceback (most recent call last):
   File "tester.py", line 41, in <module> cursor.execute(statement)
   pyodbc.ProgrammingError: 
    ('42000', '[42000] [Microsoft][SQL Server Native Client 11.0][SQL Server]  Cannot bulk load because the file    "C:\Users\userName\Desktop
\Folder\Book1.csv" could not be opened.
    Operating system error code 3(The system cannot find the path specified.). (4861) (SQLExecDirectW)')`

我真的不明白为什么它不能打开文件,因为路径肯定是正确的。

如果您需要更多信息,请告诉我。

"I am trying to bulk insert a local file into a remote MS_SQL database"

您的方法无效,因为文件规范 'C:\Users\userName\Desktop\Folder\Book1.csv' 只是工作站上的有效路径,即 运行 您的 Python 代码,但 BULK INSERT documentation 解释

data_file must specify a valid path from the server on which SQL Server is running. If data_file is a remote file, specify the Universal Naming Convention (UNC) name.

(强调我的)。也就是说,BULK INSERT 语句在服务器 运行 上,因此其他机器(如您的工作站)上的文件规范实际上是 "remote file"作为服务器而言。换句话说,SQL 服务器在服务器本身 上寻找一个名为 C:\Users\userName\Desktop\Folder\Book1 的文件,当失败时它会引发 "cannot find the path" 错误。

要使用 BULK INSERT,您需要

  1. 将文件放在 SQL 服务器可以 "see" 的网络共享上,然后提供该文件的 UNC 路径,或者

  2. 将文件上传到 SQL 服务器上的本地文件夹,然后提供文件的本地(服务器)路径。

如果这些备选方案都不可行,那么您 Python 的另一个选择是使用 subprocess module to invoke SQL Server's bcp utility 将本地文件中的数据上传到 SQL 服务器数据库。