[PYTHON] Bulk Insert Pandas DataFrame avec psycopg2

Si vous voulez insérer en masse des Pandas DataFrame dans PostgreSQL, vous pouvez mettre SQLAlchemy et utiliser .to_sql (), mais lorsque vous utilisez psycopg2 comme client PostgreSQL, vous vous sentez comme "Je ne veux pas mettre SQLAlchemy juste pour ça". Devenir.

Alors j'ai pensé: "Si vous faites .to_csv () ʻ de DataFrame et que vous le lisez avec .copy_from () ʻ de psycopg2, vous pouvez faire Bulk Insert."

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)

Créez une fonction comme celle-ci

image.png

Par exemple, si vous souhaitez insérer en bloc un tel DataFrame dans une table appelée logs dans PostgreSQL,

with psycopg2.connect('postgresql://...') as conn:
    df2db(conn, df.reset_index(), 'logs')

Tu peux le faire.

Puisque l'index n'est pas sorti, si vous voulez mettre l'index dans la table, vous devez faire .reset_index ().

Recommended Posts

Bulk Insert Pandas DataFrame avec psycopg2
Remplacez les noms / valeurs des colonnes par pandas dataframe
Supprimer les lignes avec des valeurs arbitraires dans pandas DataFrame
Supprimer les lignes avec des index en double dans pandas DataFrame
Visualisez rapidement avec les pandas
Traitement des ensembles de données avec des pandas (1)
Échantillonnage bootstrap avec Pandas
Convertir 202003 en 2020-03 avec les pandas
Traitement des ensembles de données avec des pandas (2)
Extraire N échantillons pour chaque groupe avec Pandas DataFrame
Pandas apprenant avec la chimioinfomatique
Visualisation des données avec les pandas
Manipulation des données avec les Pandas!
Mélangez les données avec les pandas
Application Python: Pandas # 3: Dataframe
Retrait groupé avec Xcode
Vérifiez quelle ligne a causé l'erreur avec apply () (dataframe, Pandas)
Calculez le décalage horaire entre deux colonnes avec Pandas DataFrame
Lire csv avec des pandas python
Charger json imbriqué avec des pandas
Standardisez par groupe avec les pandas
Jeu à la main Python (CSV est appliqué avec Pandas DataFrame, mais seulement la colonne complète Insérer de CSV à DB?)
Exporter la trame de données pandas vers Excel
Empêchez les omissions avec l'impression de pandas
Conseils de traitement des données avec Pandas
7rep - Insérer Dataframe dans Elasitcsearch