2016-08-26 4 views
1

大きなCSVファイルがあり、行ごとにではなく、一度にすべて挿入したいと思います。これは私のコードです:巨大なCSVファイルを一度にSQL ServerにPythonで挿入するには?

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

これは実際のシステムリソースによって異なります。 CSVファイルをメモリに保存し、データベースに挿入することができます。しかし、あなたのCSVファイルがあなたのRAMよりも大きい場合、時間の問題があるはずです。リストのリード素子の後

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

とあなたのdbにそれを挿入します。あなたはList.hereが私のコードであるPythonで要素としてcsvファイルの各行を保存することができます。私はすぐにsqldbにすべてのcsvの行を挿入する直接的な方法はないと思います。いくつかの前処理が必要です。

+0

提案をありがとうございましたが、私は、これはまた、行によって、通常の挿入文の行のそれと同じ時間がかかるだろうと思い、私は代わりに一括挿入を使用していました。 – Ricky

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/

関連する問題