Esta é uma falha no Python DB-API:ela inicia uma transação para você. Não deveria fazer isso; se e quando iniciar uma transação deve ser de responsabilidade do programador. APIs básicas de baixo nível como essa não devem tomar conta do desenvolvedor e fazer coisas como iniciar transações pelas nossas costas. Somos garotos crescidos - podemos começar as transações por conta própria, obrigado.
Com o psycopg2, você pode desativar esse comportamento infeliz com uma extensão de API:execute
connection.autocommit = True
. Infelizmente, não existe uma API padrão para isso, então você precisa depender de extensões não padrão para emitir comandos que devem ser executados fora de uma transação. Nenhuma linguagem está livre de suas verrugas, e esta é uma das do Python. Também já fui mordido por isso.