[Python] [Python e PostgreSQL] All'interno delle eccezioni, le transazioni si comportano diversamente?

Marco Fochesato marcofoc a libero.it
Dom 24 Ott 2010 19:52:46 CEST


On Sun, 2010-10-24 at 16:47 +0200, Daniele Varrazzo wrote:

> Bravo :) io sono uno dei maintainer di psycopg.
Bene!! Spero che lo manterrai a lungo!!

> Due cartelle? Intendi due tabelle?
Si scusa.. due TABELLE.. che pirla.
> 
> > Mi sembra che la connessione si comporti diversamente che all'interno
> > del normale codice.
> Non dovrebbe. Ma magari c'e' uno strano path nella libreria in cui
> l'eccezione viene gestita male.
> 
boh??

> Mai visto niente del genere. L'eccezione viene generata da un errore nel
> database? Se è coì la connessione è in stato di errore, ma non serve
> crearne una nuova: basterebbe un rollback. Quello che segnali (autocommit)
> sembra un disallineamento tra lo stato dell'oggetto connessione e la
> connessione stessa, che non mi è mai capitato di vedere (ma che potrebbe
> essere effettivamente un bug).
Si, l'eccezione è generata da un errore nel database: 
except psycopg2.IntegrityError: 
quindi dovrei lanciare un rollback per recuperare l'integrità della
connessione?
> 
> > Ho bisogno di fare entrambi gli update prima di chiudere la
> > transazione.. 
> > sbaglio qualcosa?
> 
> Non hai dato molti dettagli: mi piacerebbe capire meglio cosa succede.
> Puoi scrivere un esempio auto-contenuto di quello che descrivi e che
> versione di psycopg usi?
ehmm... perdonami.. che vuol dir auto-contenuto?
la versione di psycopg che uso? quella che trovo nelle repository di
ubuntu, che è precisamente la 2.0.13-2ubuntu2

Ecco i dettagli:
ho ste due tabelle:
nazioni, con le colonne "id_nazione" e "nome_nazione"
clienti, con fra le colonne la colonna "nazione" che è referenziata alla
colonna "id_nazione"

con il mio programmino voglio dare la possibilità all'utente di variare
il nome_nazione in archivio e... se vuole.. anche l'id_nazione.
L'eccezione viene sollevata quando viene cambiato un id_nazione già
usato nella tabella clienti.. 
io volevo a sto punto proseguire nell'eccezione, facendo un update sulla
tabella clienti e un update sulla tabella nazioni, e poi dare il
commit.. evitando così di generare errori di database.

Grazie Daniele.

Ps: sei tu che mi hai iniziato eh.. ho ancora qui su carta una tua mail
dove mi spiegavi in velocità la connessione, il cursore, etc.. son
andato un po' avanti..




Maggiori informazioni sulla lista Python