sql >> Database teknologi >  >> RDS >> PostgreSQL

Udførelse af flere sætninger med Postgresql via SQLAlchemy fortsætter ikke ændringer

Måden SQLAlchemys autocommit fungerer på er, at den inspicerer de udstedte erklæringer og forsøger at opdage, om data er ændret eller ej:

... implementerer SQLAlchemy sin egen "autocommit"-funktion, som fungerer fuldstændig konsekvent på tværs af alle backends. Dette opnås ved at detektere sætninger, der repræsenterer dataændrende operationer, dvs. INSERT, UPDATE, DELETE, samt data definition language (DDL) sætninger såsom CREATE TABLE, ALTER TABLE, og derefter udstede en COMMIT automatisk, hvis ingen transaktion er i gang . Detekteringen er baseret på tilstedeværelsen af ​​autocommit=True udførelsesmulighed på erklæringen. Hvis sætningen er en tekst-kun-sætning, og flaget ikke er indstillet, bruges et regulært udtryk til at detektere INSERT, UPDATE, DELETE samt en række andre kommandoer for en bestemt backend

Da flere resultatsæt ikke understøttes på SQLAlchemy-niveau, udelader registreringen i dit første eksempel blot at udstede en COMMIT, fordi den første statement er en SELECT, hvor det som i dit andet eksempel er en UPDATE. Intet forsøg på at opdage datamodificerende udsagn fra flere udsagn finder sted.

Hvis du ser på PGExecutionContext.should_autocommit_text() , vil du se, at den matcher regex mod AUTOCOMMIT_REGEXP . Med andre ord matcher den kun i begyndelsen af ​​teksten.



  1. Få adgang til webservice fra Oracles lagrede procedure

  2. Opret en beregnet kolonne, der bruger data fra en anden tabel i SQL Server

  3. Sådan opretter du forbindelse til MySQL-databasen

  4. Eksempler på konvertering af 'dato' til 'datetime offset' i SQL Server (T-SQL)