Tôi gặp phải một vấn đề tương tự và giải pháp được chấp nhận hiện tại là quá chậm đối với tôi. Bảng của tôi có 500k + hàng và tôi cần cập nhật 100k + hàng. Sau thời gian dài nghiên cứu và thử và sai, tôi đã đi đến một giải pháp hiệu quả và đúng đắn.
Ý tưởng là sử dụng psycopg làm người viết và sử dụng bảng tạm thời. df
là khung dữ liệu gấu trúc của bạn có chứa các giá trị bạn muốn đặt.
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()