大容量插入错误代码3:系统找不到指定的路径

2024-05-23 14:27:16 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试使用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)')`

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

如果你需要更多的信息请告诉我。


Tags: 文件csv代码数据库sqlusernamebulkfolder
1条回答
网友
1楼 · 发布于 2024-05-23 14:27:16

“我正在尝试将本地文件大容量插入远程MS-SQL数据库”

您的方法不起作用,因为文件规范'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语句在服务器上运行,因此就服务器而言,其他计算机(如工作站)上的文件规范实际上是“远程文件”。换言之,SQL Server会在服务器本身上查找名为C:\Users\userName\Desktop\Folder\Book1的文件,如果失败,则会引发“找不到路径”错误。

为了使用大容量插入,您需要

  1. 将文件放在SQL Server可以“看到”的网络共享上,然后提供该文件的UNC路径,或

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

如果这两种方法都不可行,那么Python中的另一种方法是使用subprocess模块调用SQL Server的bcp utility将本地文件中的数据上载到sqlserver数据库中。

相关问题 更多 >