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.
was Pandas ist da drin: Sie müssen PK in der Liste Spalten überspringen? Poste eine Beispielzeile deiner CSV Zeige deine Tabellenstruktur – e4c5
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