[Python] [Python e PostgreSQL] All'interno delle eccezioni, le transazioni si comportano diversamente?
Marco Fochesato
marcofoc a libero.it
Lun 25 Ott 2010 22:17:43 CEST
On Mon, 2010-10-25 at 11:53 +0200, Daniele Varrazzo wrote:
> Io per conto mio ho provato:
>
> import psycopg2
>
> def test(dsn):
> """test if a connection created in an exception handler goes
> autocommit"""
> cnn = psycopg2.connect(dsn)
> cur = cnn.cursor()
>
> cur.execute("""drop table if exists test;""")
> cur.execute("""create table test (data int primary key);
> insert
> into test values (1);""")
> cnn.commit()
>
> # make an error
> try:
> cur.execute("""insert into test values (1)""")
> except psycopg2.IntegrityError:
> # connection created in the handler
> cnn2 = psycopg2.connect(dsn)
> cur2 = cnn2.cursor()
> cur2.execute("""insert into test values (2)""")
>
> # was cnn2 autocommit?
> cnn3 = psycopg2.connect(dsn)
> cur3 = cnn3.cursor()
> cur3.execute("select count(*) from test where data = 2")
> n = cur3.fetchone()[0]
>
> assert n == 0, "connection in exception handler autocommit"
>
> # double check
> cnn2.commit()
> cur3.execute("select count(*) from test where data = 2")
> n = cur3.fetchone()[0]
> assert n == 1
>
> print "ok"
>
> test("dbname=test")
>
> Ma questo test, nelle mie condizioni passa. Io ho sottomano solo una
> versione di sviluppo di psycopg: posso provare pių tardi con quella
> che usi
> tu, ma se riesci a creare la condizione che fa fallire l'assert col
> tuo
> setup allora possiamo dire che c'č un bug. Altrimenti non si sa :)
Testato, passa anche da me nel mio database.
Ma ci voglio capire qualcosa di pių....
Ciao intanto.
Maggiori informazioni sulla lista
Python