Este caso de uso específico é destacado em "Entendendo o Autocommit":
O controle total do comportamento de “autocommit” está disponível usando o generativoConnection.execution_options()
método fornecido emConnection
,Engine
,Executable
, usando o sinalizador “autocommit” que ativará ou desativará o autocommit para o escopo selecionado. Por exemplo, umtext()
A construção que representa um procedimento armazenado que confirma pode usá-lo para que uma instrução SELECT emita um COMMIT:
engine.execute(text("SELECT my_mutating_procedure()").execution_options(autocommit=True))
A maneira como o SQLAlchemy autocommit detecta as operações de alteração de dados é que ele corresponde à instrução com um padrão, procurando por coisas como UPDATE, DELETE e similares. É impossível detectar se uma função/procedimento armazenado executa mutações e, portanto, é fornecido um controle explícito sobre o autocommit.
A sequência é incrementada mesmo em caso de falha porque
nextval()
e setval()
chamadas nunca são revertidas.