如何在python中一次将巨大的CSV文件插入SQL Server?

时间:2016-08-26 10:14:05

标签: python sql-server csv

我有一个大的CSV文件,我想一次性插入所有文件,而不是逐行插入。这是我的代码:

import pypyodbc

import csv

con = pypyodbc.connect('driver={SQL Server};' 'server=server_name;' 'database=DB-name;' 'trusted_connection=true')

cur = con.cursor()

csfile = open('out2.csv','r')

csv_data = csv.reader(csfile)

for row in csv_data:

    try:
        cur.execute("BULK INSERT INTO Table_name(Attribute, error, msg, Value, Success, TotalCount, SerialNo)" "VALUES (?, ?, ?, ?, ?, ?, ?)", row)
    except Exception:
        time.sleep(60)
cur.close()

con.commit()

con.close()

2 个答案:

答案 0 :(得分:0)

这实际上取决于您的系统资源。您可以将CSV文件存储在内存中,然后将其插入数据库。但是,如果您的CSV文件大于RAM,则应该有一些时间问题。您可以将每行csv文件保存为python List中的元素。这是我的代码:

csvRows = []
csvFileObj = open('yourfile.csv', 'r')
readerObj = csv.reader(csvFileObj)
for row in readerObj:
    element1 = row[0]
    .......
    csvRows.append((element1,element2,...))

在列表的读取元素之后,将其插入到数据库中。我不认为有一种直接的方法可以同时将所有csv行插入到sqldb中。你需要一些预处理。

答案 1 :(得分:0)

批量插入应该为你做。

BULK
INSERT CSVTest
FROM 'c:\csvtest.txt'
WITH
(
FIELDTERMINATOR = ',',
ROWTERMINATOR = '\n'
)
GO
--Check the content of the table.
SELECT *
FROM CSVTest
GO

http://blog.sqlauthority.com/2008/02/06/sql-server-import-csv-file-into-sql-server-using-bulk-insert-load-comma-delimited-file-into-sql-server/

另外,请查看此链接。

https://www.simple-talk.com/sql/learn-sql-server/bulk-inserts-via-tsql-in-sql-server/