sql >> Database >  >> RDS >> PostgreSQL

Hoe een Postgres-tabelkolom bij te werken met behulp van een panda-gegevensframe?

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()


  1. Sequelize limiet en compenseren onjuiste plaatsing in query

  2. C#/Oracle:codering/tekenset van query specificeren?

  3. PHP - Selectievakje maken door de records uit de MySQL-database als waarden te gebruiken

  4. Gebruikersregistratie en e-mailverificatie PHP en MySQL