Detta specifika användningsfall pekas ut i "Understanding Autocommit":
Full kontroll över "autocommit"-beteendet är tillgängligt med den generativa
Connection.execution_options()
metod som tillhandahålls påConnection
,Engine
,Executable
, med "autocommit"-flaggan som slår på eller av autocommit för det valda omfånget. Till exempel entext()
konstruktion som representerar en lagrad procedur som commits kan använda den så att en SELECT-sats kommer att utfärda en COMMIT:engine.execute(text("SELECT my_mutating_procedure()").execution_options(autocommit=True))
Sättet som SQLAlchemy autocommit upptäcker dataändringsoperationer är att det matchar uttalandet mot ett mönster, letar efter saker som UPPDATERA, DELETE och liknande. Det är omöjligt för den att upptäcka om en lagrad funktion/procedur utför mutationer, och därför tillhandahålls explicit kontroll över autocommit.
Sekvensen ökas även vid misslyckande eftersom nextval()
och setval()
samtal återställs aldrig.