2016-07-28 4 views
1

Ich habe eine vorhandene Tabelle in Postgresql, die eine ID-Spalte (seriell) für die Zeilenidentifikation hat und der Primärschlüssel ist. Ich habe ein Skript, um die CSVs zu importieren, die die ID-Spalte nicht enthalten. Hier ist der Code Ich verwende:CSV-Datei ohne Primärschlüssel in vorhandene Tabelle importieren

file_list = glob.glob(path) 

for f in file_list: 
    if os.stat(f).st_size != 0: 
     filename = os.path.basename(f) 
     arc_csv = arc_path + filename 

     data = pandas.read_csv(f, index_col = 0) 
     ind = data.apply(lambda x: not pandas.isnull(x.values).any(),axis=1) 
     data[ind].to_csv(arc_csv) 
     cursor.execute("COPY table FROM %s WITH CSV HEADER DELIMITER ','",(arc_csv,)) 
     conn.commit() 
     os.remove(f) 
    else: 
     os.remove(f) 

Das Skript kann nicht die CSV mit der ID (P_Key) Spalte in der Tabelle importiert da sie nicht die CSV bestehenden, so habe ich 2 Optionen, die ich denken kann, : 1- Geben Sie einen Befehl aus, um die ID-Spalte vor dem Import zu löschen und nach dem Import wieder hinzuzufügen, oder . 2- Suchen Sie nach einem Weg, um die ID-Spalte über den Befehl cursor.execute zu vergrößern.

Meine Frage ist, welche Herangehensweise besser ist und eine gute Möglichkeit, darüber zu gehen (oder natürlich hat jemand eine bessere Idee!)? Vielen Dank.

+0

was Pandas ist da drin: Sie müssen PK in der Liste Spalten überspringen? Poste eine Beispielzeile deiner CSV Zeige deine Tabellenstruktur – e4c5

+0

Da du bereits Python verwendest, könntest du einfach die Zeilen der csv Daten selbst durchlaufen und sie einzeln einfügen, ohne dich um die Einschränkungen von COPY FROM kümmern zu müssen . – larsks

Antwort

1

Der Befehl COPY enthält die Spalten, die Sie einfügen möchten. COPY-Tabelle (col1, col2, ...)

COPY documentation

+0

DOH! Ich habe das ursprünglich versucht und dachte, ich würde etwas vermasseln, weil es nicht funktioniert hat. Realisiert hatte ich mein Namenscollege alles vermasselt. Es wurde für alle Skripte und Tabellen einheitlich gemacht. Kein Problem jetzt. Vielen Dank! – Jeff

Verwandte Themen