इसी तरह की समस्या में भाग गया और वर्तमान स्वीकृत समाधान मेरे लिए बहुत धीमा था। मेरी तालिका में 500k+ पंक्तियाँ थीं और मुझे 100k+ पंक्तियों को अद्यतन करने की आवश्यकता थी। लंबे शोध और परीक्षण और त्रुटि के बाद मैं एक कुशल और सही समाधान पर पहुंचा।
विचार यह है कि psycopg को अपने लेखक के रूप में उपयोग करें और एक अस्थायी तालिका का उपयोग करें। df
क्या आपका पांडा डेटाफ़्रेम है जिसमें वे मान हैं जिन्हें आप सेट करना चाहते हैं।
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()