sql >> Databasteknik >  >> RDS >> PostgreSQL

Hur uppdaterar man en Postgres-tabellkolumn med hjälp av en pandas-dataram?

Stötte på ett liknande problem och den nuvarande accepterade lösningen var för långsam för mig. Mitt bord hade 500k+ rader och jag behövde uppdatera 100k+ rader. Efter lång forskning och försök och misstag kom jag fram till en effektiv och korrekt lösning.

Tanken är att använda psycopg som din skribent och att använda en temporär tabell. df är din pandas dataram som innehåller värden du vill ställa in.

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. Hur skriver man SQL-sats med citattecken?

  2. 3 sätt att hitta positionen för en delsträng i en sträng i MySQL

  3. SQL-poster som löper ut efter 24 timmar

  4. PHP-sidan visar råkod