Mengalami masalah yang sama dan solusi yang diterima saat ini terlalu lambat untuk saya. Tabel saya memiliki 500k+ baris dan saya perlu memperbarui 100k+ baris. Setelah penelitian yang panjang dan trial and error saya tiba di solusi yang efisien dan benar.
Idenya adalah menggunakan psycopg sebagai penulis Anda dan menggunakan tabel sementara. df
adalah kerangka data panda Anda yang berisi nilai yang ingin Anda atur.
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()