2016-08-26 1 views
1

Ich habe eine große CSV-Datei, und ich möchte sie alle anstelle von Zeile für Zeile einfügen. Das ist mein Code:Wie fügt man eine riesige CSV-Datei gleichzeitig in SQL Server in Python ein?

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() 

Antwort

0

Es hängt wirklich von Ihren Systemressourcen ab. Sie können CSV-Dateien im Speicher speichern und dann in die Datenbank einfügen. Wenn Ihre CSV-Datei jedoch größer als Ihr Arbeitsspeicher ist, sollte ein Zeitproblem auftreten. Sie können jede Zeile der CSV-Datei als Element in Python List.here speichern ist mein Code:

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

nach dem Leseelement der Liste und fügen Sie ihn auf Ihrer db. Ich glaube nicht, dass es einen direkten Weg gibt, alle csv Zeilen gleichzeitig in sqldb einzufügen. Sie benötigen etwas Vorverarbeitung.

+0

danke für den Vorschlag, aber ich denke, die gleiche Zeit auch wie die üblichen Insert-Anweisung Zeile für Zeile nehmen, so verwenden i statt Masseneinsatz. – Ricky

0

Bulk Insert sollte es für Sie tun.

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/

Überprüfen Sie auch diesen Link aus.

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

Verwandte Themen