Kwam tegen een soortgelijk probleem aan en de huidige geaccepteerde oplossing was te traag voor mij. Mijn tabel had 500k+ rijen en ik moest 100k+ rijen bijwerken. Na lang zoeken en vallen en opstaan kwam ik tot een efficiënte en correcte oplossing.
Het idee is om psycopg als schrijver te gebruiken en een tijdelijke tabel te gebruiken. df
is uw panda's-dataframe dat waarden bevat die u wilt instellen.
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()