Autocommit SQLAlchemy funguje tak, že kontroluje vydané příkazy a snaží se zjistit, zda jsou data změněna či nikoli:
..., SQLAlchemy implementuje svou vlastní funkci „autocommit“, která funguje zcela konzistentně napříč všemi backendy. Toho je dosaženo detekcí příkazů, které představují operace změny dat, tj. INSERT, UPDATE, DELETE, a také příkazů jazyka definice dat (DDL), jako je CREATE TABLE, ALTER TABLE, a poté automatickým vydáním COMMIT, pokud neprobíhá žádná transakce. . Detekce je založena na přítomnosti
autocommit=True
možnost provedení na výpisu. Pokud je příkaz pouze textový a příznak není nastaven, použije se regulární výraz k detekci INSERT, UPDATE, DELETE a také řady dalších příkazů pro konkrétní backend
Vzhledem k tomu, že na úrovni SQLAlchemy není podporováno více sad výsledků, ve vašem prvním příkladu detekce jednoduše vynechá vydání COMMIT, protože první příkaz je SELECT, kde jako ve vašem druhém příkladu je to UPDATE. Nedochází k žádnému pokusu o detekci příkazů modifikujících data z více příkazů.
Pokud se podíváte na PGExecutionContext.should_autocommit_text()
, uvidíte, že se shoduje s regulárním výrazem s AUTOCOMMIT_REGEXP
. Jinými slovy, shoduje se pouze na začátku textu.