sql >> Databáze >  >> RDS >> PostgreSQL

Jak aktualizovat sloupec tabulky Postgres pomocí datového rámce pandas?

Narazil jsem na podobný problém a současné přijímané řešení pro mě bylo příliš pomalé. Moje tabulka měla 500 000+ řádků a potřeboval jsem aktualizovat 100 000+ řádků. Po dlouhém zkoumání a pokusech a omylech jsem dospěl k efektivnímu a správnému řešení.

Cílem je použít psycopg jako váš spisovatel a použít dočasnou tabulku. df je váš datový rámec pandy, který obsahuje hodnoty, které chcete nastavit.

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. MS SQL Server a JDBC:uzavřené připojení

  2. Konfigurace MySQL ODBC

  3. Dotaz MySQL pro získání názvů sloupců?

  4. Nastavení SQLPlus pro generování datového souboru odděleného tabulátory