[Python-de] Python und PostgreSQL : update

Gerhard Häring gh at ghaering.de
Fre Dez 12 18:18:42 CET 2003


dbuechel at tiscali.ch wrote:
> Hallo,
> 
> ich bin Python-Anfängerin und habe so meine Probleme. Ich benutzte Python
> um eine PostgreSQL Datenbank zu aktuallisieren. 

Du verwendest hoffe ich mal ein Modul dazu, dass die Python DB-API 
implementiert, oder? Also pyPgSQL, psycopg, oder wenn man PyGreSQL 
verwendet, das Modul "pgdb".

> Ich habe eine Tabelle "Kante"
> mit den Attributen "GID", "Kosten", "Länge" etc. Nun habe ich mit Python
> für jede Reihe einen Wert für das Attribut "Kosten" berechnet. Kann mir
> nun jemand helfen, wie ich die berechneten Werte in die PostgreSQL Tabelle
> einlesen kann mit Hilfe der PyGreSQL-Interface? In der Dokumentation (www.postgresql.org)
> habe ich leider keine Beispiele gefunden...
> 
> Vielleicht kann mir jemand ein Beispiel geben. 

So was?

# --- START ---
from pyPgSQL import PgSQL

def kosten(laenge):
     return laenge * 1.5

con = PgSQL.connect()
cur = con.cursor()
cur.execute("select id, laenge from kante")
for row in cur.fetchall():
     # row[0] ist die id, row[1] ist laenge
     cur.execute("update kante set kosten=%s where id=%s",
                 (kosten(row[1]), row[0]))
con.commit()
con.close()
# --- ENDE ---

Für PyGreSQL einfach das Import-Statement und den Aufruf von .connect() 
entspr. ändern.

Ach ja, ich bin von folgendem Test-Schema ausgegangen:

create table kante(id serial, kosten numeric, laenge numeric);
insert into kante(laenge) values (10);
insert into kante(laenge) values (20);

-- Gerhard