[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