使用 pymssql 将文本文件批量插入 SQL Server
Posted
技术标签:
【中文标题】使用 pymssql 将文本文件批量插入 SQL Server【英文标题】:Bulk Insert text file into SQL Server using pymssql 【发布时间】:2018-06-21 23:17:23 【问题描述】:我正在尝试使用 pymssql 将文本文件导入 SQL Server 2014(我是 python 的初学者,但如果您了解一点 SQL,这似乎是最简单的方法)。 SQL Server 与我要导入的文件位于同一台机器上。
这是我当前的代码
SQLCon = pymssql.connect(host=ServerNm,database=DatabaseNm)
Cursor = SQLCon.cursor()
BulkInsert = '''
BULK INSERT OD_List
FROM
WITH (
FIRSTROW=2
, FIELDTERMINATOR=','
, ROWTERMINATOR='\n'
)
'''.format("'C:\Users\thomsog1\Desktop\TM Tool\Test\SQL\Inputs\OD_List.txt'")
Cursor.execute(BulkInsert)
SQLCon.commit()
我在互联网上找到了一些编码示例并尝试了它们都无济于事......我一直以以下错误结束:
File "pymssql.pyx", line 467, in pymssql.Cursor.execute (pymssql.c:7561)
pymssql.OperationalError: (4861, 'Cannot bulk load because the file
"C:\\Users\thomsog1\\Desktop\\TM Tool\\Test\\SQL\\Inputs\\OD_List.txt" could
not be opened. Operating system error code 123(The filename, directory name,
or volume label syntax is incorrect.).DB-Lib error message 20018, severity
16:\nGeneral SQL Server error: Check messages from the SQL Server\n')
任何帮助将不胜感激!
【问题讨论】:
BULK INSERT error code 3: The system cannot find the path specified的可能重复 另外,字符串中的反斜杠可能会导致问题。尝试使用像r'C:\Users\ ...'
这样的原始字符串
感谢您的回复。我确实看到了这个问题,但是 SQL Server 与我要导入的文件位于同一台机器上,所以我认为它不相关。抱歉,我之前没有说清楚,我已经相应地编辑了问题。
我已经尝试过 .format("r'C:\Users\thomsog1\Desktop\TM Tool\Test\SQL\Inputs\OD_List.txt'") 和 .format(r'C: \Users\thomsog1\Desktop\TM Tool\Test\SQL\Inputs\OD_List.txt')。他们给出“无效的对象名称”错误。
试试.format(r"'C:\Users\thomsog1\Desktop\TM Tool\Test\SQL\Inputs\OD_List.txt'")
【参考方案1】:
对于 T-SQL,BULK INSERT 语句的 FROM 子句中的文件路径需要用单引号括起来,但它还包含反斜杠,因此我们需要使用 Python 原始字符串 (r"..."
),因此
.format(r"'C:\Users\thomsog1\Desktop\TM Tool\Test\SQL\Inputs\OD_List.txt'")
【讨论】:
以上是关于使用 pymssql 将文本文件批量插入 SQL Server的主要内容,如果未能解决你的问题,请参考以下文章
使用 python pymssql 将二进制文件插入 MSSQL db (varbinary)
尝试将数据表批量插入 SQL Server 时出现 InvalidOperationException