[Python] [Python e PostgreSQL] All'interno delle eccezioni, le transazioni si comportano diversamente?
Daniele Varrazzo
piro a develer.com
Dom 24 Ott 2010 16:47:12 CEST
On Sun, 24 Oct 2010 15:03:15 +0200, Marco Fochesato <marcofoc a libero.it>
wrote:
> Buongiorno a tutti!
> Uso Python per creare piccole applicazioni, che si collegano ad una base
> dati PostgreSql attraverso il driver psycopg.
Bravo :) io sono uno dei maintainer di psycopg.
> Per la prima volta mi son trovato a dover operare una transazione (un
> update su due cartelle), all'interno di un except.
Due cartelle? Intendi due tabelle?
> 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.
> Intanto, ho dovuto aprire nuovamente la connessione, anche se era già
> aperta prima del sollevamento dell'except... ma la cosa peggiore è che
> sembra che le istruzioni vengano eseguite immediatamente sul database,
> senza attendere il mio commit() finale... è possibile?
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).
> 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?
Grazie, a presto.
--
Daniele Varrazzo - Develer S.r.l.
http://www.develer.com
Maggiori informazioni sulla lista
Python