我有一个大的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()
答案 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
另外,请查看此链接。
https://www.simple-talk.com/sql/learn-sql-server/bulk-inserts-via-tsql-in-sql-server/