Questo è un difetto nella DB-API Python:avvia una transazione per te. Non dovrebbe farlo; se e quando avviare una transazione dovrebbe spettare al programmatore. API di base di basso livello come questa non dovrebbero fare da babysitter allo sviluppatore e fare cose come avviare transazioni alle nostre spalle. Siamo grandi ragazzi:possiamo iniziare le transazioni da soli, grazie.
Con psycopg2, puoi disabilitare questo comportamento sfortunato con un'estensione API:esegui connection.autocommit = True
. Sfortunatamente non esiste un'API standard per questo, quindi devi dipendere da estensioni non standard per emettere comandi che devono essere eseguiti al di fuori di una transazione.
Nessun linguaggio è privo di verruche, e questo è uno di Python. Anche io sono stato morso da questo.