Deze specifieke use case wordt uitgelicht in "Understanding Autocommit":
Volledige controle over het "autocommit"-gedrag is beschikbaar met behulp van de generatieve
Connection.execution_options()
methode geleverd opConnection
,Engine
,Executable
, met behulp van de vlag "autocommit" die de autocommit voor het geselecteerde bereik in- of uitschakelt. Bijvoorbeeld eentext()
constructie die een opgeslagen procedure vertegenwoordigt die commits zou kunnen gebruiken, zodat een SELECT-instructie een COMMIT afgeeft:engine.execute(text("SELECT my_mutating_procedure()").execution_options(autocommit=True))
De manier waarop SQLAlchemy automatisch gegevensveranderende bewerkingen detecteert, is dat het de instructie vergelijkt met een patroon, op zoek naar dingen als UPDATE, DELETE en dergelijke. Het is onmogelijk om te detecteren of een opgeslagen functie/procedure mutaties uitvoert, en dus wordt expliciete controle over autocommit geboden.
De reeks wordt zelfs bij een fout verhoogd, omdat nextval()
en setval()
oproepen worden nooit teruggedraaid.