PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

Schreiben Sie einen schnellen Pandas-Datenrahmen in Postgres

Ihr zweiter Ansatz sollte sehr schnell sein.

Es gibt zwei Probleme mit Ihrem Code:

  1. Nach dem Schreiben der CSV-Datei in f Sie befinden sich am Ende der Datei. Sie müssen Ihre Position an den Anfang zurückversetzen, bevor Sie mit dem Lesen beginnen.
  2. Wenn Sie eine CSV-Datei schreiben, müssen Sie Header und Index weglassen

So sollte Ihr endgültiger Code aussehen:

import io
f = io.StringIO()
pd.DataFrame({'a':[1,2], 'b':[3,4]}).to_csv(f, index=False, header=False)  # removed header
f.seek(0)  # move position to beginning of file before reading
cursor = conn.cursor()
cursor.execute('create table bbbb (a int, b int);COMMIT; ')
cursor.copy_from(f, 'bbbb', columns=('a', 'b'), sep=',')
cursor.execute("select * from bbbb;")
a = cursor.fetchall()
print(a)
cursor.close()