sql >> Databasteknik >  >> RDS >> PostgreSQL

Att köra flera satser med Postgresql via SQLAlchemy kvarstår inte

Sättet som SQLAlchemys autocommit fungerar är att den inspekterar de utfärdade uttalandena och försöker upptäcka om data är modifierade eller inte:

..., implementerar SQLAlchemy sin egen "autocommit"-funktion som fungerar helt konsekvent över alla backends. Detta uppnås genom att upptäcka uttalanden som representerar dataförändrande operationer, dvs. INSERT, UPDATE, DELETE, såväl som datadefinitionsspråk (DDL)-satser som CREATE TABLE, ALTER TABLE och sedan utfärda en COMMIT automatiskt om ingen transaktion pågår . Detekteringen baseras på förekomsten av autocommit=True exekveringsalternativ på uttalandet. Om satsen endast är en textsats och flaggan inte är inställd, används ett reguljärt uttryck för att detektera INSERT, UPDATE, DELETE, samt en mängd andra kommandon för en viss backend

Eftersom flera resultatuppsättningar inte stöds på SQLAlchemy-nivå, i ditt första exempel utelämnar upptäckten helt enkelt en COMMIT eftersom den första uttalande är en SELECT, där det som i ditt andra exempel är en UPPDATERING. Inget försök att upptäcka datamodifierande satser från flera satser görs.

Om du tittar på PGExecutionContext.should_autocommit_text() , ser du att den matchar regex mot AUTOCOMMIT_REGEXP . Med andra ord matchar den bara i början av texten.



  1. Hur förfinar man utdata som kommer från SELECT-frågan i kommandotolken?

  2. Skapa en Postgres-databas med python

  3. Fixa "Arithmetic overflow-fel vid konvertering av int till datatyp numeric" i SQL Server

  4. Hur kan jag simulera en arrayvariabel i MySQL?