sql >> Database teknologi >  >> RDS >> PostgreSQL

Hvordan opdaterer man en Postgres-tabelkolonne ved hjælp af en panda-dataramme?

Løb ind i et lignende problem, og den nuværende accepterede løsning var for langsom for mig. Mit bord havde 500k+ rækker, og jeg skulle opdatere 100k+ rækker. Efter længere tids research og forsøg og fejl nåede jeg frem til en effektiv og korrekt løsning.

Ideen er at bruge psycopg som din skribent og at bruge en midlertidig tabel. df er din pandas dataramme, der indeholder værdier, du vil indstille.

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()


  1. LPAD i SQL Server 2008

  2. Sådan rejser du tilpasset Postgresql-fejl og håndterer den i Ecto

  3. Datamodel for bryllupsorganisation

  4. HTML Form Slider