PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

Comment mettre à jour une colonne de table Postgres à l'aide d'une trame de données pandas ?

J'ai rencontré un problème similaire et la solution actuellement acceptée était trop lente pour moi. Ma table avait plus de 500 000 lignes et j'avais besoin de mettre à jour plus de 100 000 lignes. Après de longues recherches et essais et erreurs, je suis arrivé à une solution efficace et correcte.

L'idée est d'utiliser psycopg comme écrivain et d'utiliser une table temporaire. df est votre dataframe pandas qui contient les valeurs que vous souhaitez définir.

import psycopg2

conn = psycopg2.connect("dbname='db' user='user' host='localhost' password='test'")
cur = conn.cursor()

rows = zip(df.id, df.z)
cur.execute("""CREATE TEMP TABLE codelist(id INTEGER, z INTEGER) ON COMMIT DROP""")
cur.executemany("""INSERT INTO codelist (id, z) VALUES(%s, %s)""", rows)

cur.execute("""
    UPDATE table_name
    SET z = codelist.z
    FROM codelist
    WHERE codelist.id = vehicle.id;
    """)

cur.rowcount
conn.commit()
cur.close()
conn.close()