Wenn Sie Pandas DataFrame als Masseneinfügung in PostgreSQL einfügen möchten, können Sie SQLAlchemy einfügen und .to_sql ()
verwenden. Wenn Sie jedoch psycopg2 als PostgreSQL-Client verwenden, möchten Sie "SQLAlchemy nicht nur dafür einfügen". Werden.
Also dachte ich: "Wenn Sie" .to_csv () "von DataFrame ausführen und es mit" .copy_from () "von psycopg2 lesen, können Sie Bulk Insert ausführen."
from io import StringIO
import pandas as pd
import psycopg2
def df2db(conn: psycopg2.extensions.connection, df: pd.DataFrame, table: str):
buf = StringIO()
df.to_csv(buf, sep='\t', na_rep=r'\N', index=False, header=False)
buf.seek(0)
with conn.cursor() as cur:
cur.copy_from(buf, table, columns=df.columns)
Erstellen Sie eine solche Funktion
Wenn Sie beispielsweise einen solchen DataFrame in eine Tabelle mit dem Namen "logs" in PostgreSQL einfügen möchten,
with psycopg2.connect('postgresql://...') as conn:
df2db(conn, df.reset_index(), 'logs')
Du kannst das.
Da der Index nicht ausgegeben wird, müssen Sie .reset_index ()
ausführen, wenn Sie den Index in die Tabelle einfügen möchten.
Recommended Posts