sql >> Databáze >  >> RDS >> PostgreSQL

Provádění více příkazů pomocí Postgresql přes SQLAlchemy neuchová změny

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.



  1. Jaký je nejlepší způsob řízení verzí uložených procedur serveru SQL?

  2. Jak funguje funkce LTRIM() v MySQL

  3. Jak velká může být databáze MySQL, než začne klesat výkon

  4. Jak změnit uživatele na superuživatele v PostgreSQL