PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

Como atualizar uma coluna da tabela Postgres usando um quadro de dados pandas?


Corri para um problema semelhante e a solução atual aceita era muito lenta para mim. Minha tabela tinha mais de 500 mil linhas e eu precisava atualizar mais de 100 mil linhas. Após uma longa pesquisa e tentativa e erro, cheguei a uma solução eficiente e correta.

A ideia é usar psycopg como seu escritor e usar uma tabela temporária. df é o dataframe do pandas que contém os valores que você deseja definir.
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()