Als een eerstejaars met psycopg2

Als een eerstejaars ben ik sinds jaren weer in de autocommit grap van database getrapt. Om een of andere reden bleven de tupels netjes in de tabel zitten. Dit terwijl de query direct met psql uitgevoerd wel netjes zijn werk deed. Dus maar eens in de documentatie van psycopg2 gedoken om te zien wat er mis was met de volgende Python-code.

1
2
3
4
5
curr = conn.cursor()
try:
    curr.execute("""delete from tabel where x > 2""")
except Exception, e:
    exit(1)

Het antwoord was helaas snel gevonden en deed me terug denken aan de eerste stappen op Oracle. Een dikke 15 jaar geleden, dat wel. De bijgewerkte code hieronder vertelt eigenlijk wel het verhaal.

1
2
3
4
5
6
7
curr = conn.cursor()
try:
    curr.execute("""delete from tabel where x > 2""")
    conn.commit()
except Exception, e:
    conn.rollback()
    exit(1)

Ik heb me laten misleiden door de autocommit bij andere modules binnen PHP en Perl als een eerstejaars. Want daar stopt autocommit op het moment dat je een transactie start, maar hier moet alles worden gecommit. Dit doet met denken of er dirty read/write bugs zijn te vinden in sommige applicaties die autocommit doen.