【发布时间】:2015-02-26 17:13:16
【问题描述】:
我有一个 Python 脚本,我正在运行它以从 CSV 获取数据并将其插入到我的 MS SQL Server 中。 CSV 大约 35 MB,包含大约 200,000 条记录和 15 列。 SQL Server 导入工具将所有数据插入服务器不到 5 分钟。使用 pypyodbc 的 python 脚本需要 30 分钟或更长时间。
我的代码做错了什么导致这需要这么长时间
import pypyodbc
import csv
import datetime
now = datetime.datetime.now()
cnxn = pypyodbc.connect('DRIVER={SQL Server};SERVER=;DATABASE=')
cursor = cnxn.cursor()
cursor.execute("""
DELETE FROM DataMaster
""")
cnxn.commit()
FileName = "Data - " + str('{:02d}'.format(now.month)) + "-" + str('{:02d}'.format(now.day-1)) + "-" + str(now.year) + ".csv"
myCSV = open(FileName)
myCSV = csv.reader(myCSV)
next(myCSV, None) # this skips the headers
listlist = list(myCSV)
cursor.executemany('''
INSERT INTO DataMaster (Column1,Column2,Column3,Column4,Column5,Column6,Column7,Column8,Column9,Column10,Column11,Column12,Column13,Column14,Column15)
VALUES(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)''',
(
listlist
)
)
cursor.commit() # commits any changes
cnxn.close() # closes the connection
print "Import Completed."
【问题讨论】:
-
您是否尝试过“BULK INSERT”命令?
-
我没有。我以前没用过。所以,我只是设置了批量插入语句,也许在 SSMS 中对其进行测试,然后只需从我的 Python 脚本中运行该 SQL?你觉得这样会快很多吗?
-
是的,恕我直言,BULK INSERT 是导入数据的最快方式。您可以在 SSMS 中轻松对其进行测试。
-
好的,谢谢。我今天将致力于创建批量插入语句,并看看它是如何进行的。
-
是的,不是那样的。只是一个计划旧表。使用 SQL Server 导入向导导入 CSV 需要 15.86 秒。我刚刚测试了它以获得基准。与 PyPyODBC 方法相比,它的速度如此之快令人难以置信。我想我需要考虑获得执行批量插入所需的权限。
标签: python sql sql-server csv