2016-06-30 9 views
0

Ich habe eine CSV-Datei, die etwa wie folgt aussieht: (. Ex - ['Date', 'Person', 'Time Out', etc.] or ['6/20/2016', 'August', '11:58' etc.])CSV-Datei in SQL-Anweisung INSERT

Date,Person,Time Out,Time Back,Restaurant,Calories,Delicious? 
6/20/2016,August,11:58,12:45,Black Bear,850,Y 
6/20/2016,Marcellus,12:00,12:30,Brought Lunch,,Y 
6/20/2016,Jessica,11:30,12:30,Wendy's,815,N 
6/21/2016,August,12:05,1:01,Brought Lunch,,Y 

Bisher habe ich es geschafft haben, jede Zeile in eine Liste von Zeichenketten zu drucken.

Jetzt brauche ich 2 weitere Dinge zu tun: (. Für ex - ['ID', 'Date', 'Person', etc.] and ['1', '6/20/2016', 'August', etc.])

  1. Fügen Sie einen ID-Header und sequentielle numerische Zeichenfolge jeder Zeile
  2. Separate jede Zeile, so dass sie in werden können formatiert Anweisungen fügen, anstatt nur das Programm mit jeder einzelnen Zeile nacheinander auszudrucken -

Hier ist der Code, der mich so weit wie ich bin jetzt bekommen hat (zB INSERT INTO Table ['ID', 'Date', 'Person', etc.] VALUES ['1', '6/20/2016', 'August', etc.].):

import csv 

openFile = open('test.csv', 'r') 
csvFile = csv.reader(openFile) 
for row in csvFile: 
    print (row) 
openFile.close() 
+2

die ID-Spalte in der SQL-Tabelle ein Primärschlüssel? In diesem Fall könnten Sie sich auf die ** auto_increment ** -Eigenschaft von SQL verlassen und die ID-Spalte in der Einfügeabfrage einfach ignorieren. – Mumpo

+0

Warum verwenden Sie nicht das von MySQL eingebaute 'LOAD DATA INFILE', um direkt von der CSV-Datei in die Datenbank zu laden, anstatt es in Python zu analysieren? – Barmar

+0

@Mumpo, Ja ist es. Ich bin mit MySQL nicht sehr vertraut, also wusste ich nicht, dass dies eine Option ist, aber viel praktikabler erscheint als das, was ich oben aufgelistet hatte. Danke für den Tipp. – ThoseKind

Antwort

0

Versuchen Sie, diese (ich den ID-Teil ignoriert, da Sie die mySQL auto_increment verwenden)

import csv

openFile = open('test.csv', 'r') 
csvFile = csv.reader(openFile) 
header = next(csvFile) 
headers = map((lambda x: '`'+x+'`'), header) 
insert = 'INSERT INTO Table (' + ", ".join(headers) + ") VALUES " 
for row in csvFile: 
    values = map((lambda x: '"'+x+'"'), row) 
    print (insert +"("+ ", ".join(values) +");") 
openFile.close() 
+0

Das hat funktioniert. Danke für die Hilfe! Als Randnotiz wissen Sie, ob es möglich wäre, unerwünschte Zwischenräume zwischen Werten in der VALUES-Liste zu entfernen? – ThoseKind

+0

Diese Räume waren beabsichtigt, ersetzen Sie einfach die Zeile vor dem letzten mit diesem: 'print (einfügen +" ("+", ". Join (Werte) +"); ")' – Mumpo

+0

Oh nein ich verstehe diesen Teil, ich bezieht sich mehr auf die eigentlichen Datenstrings selbst (z. B. - "UNKNOWN", statt "UNKNOWN"). – ThoseKind