PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

Wykonywanie wielu instrukcji za pomocą Postgresql za pośrednictwem SQLAlchemy nie powoduje utrwalania zmian

Sposób, w jaki działa autocommit SQLAlchemy, polega na sprawdzaniu wydanych instrukcji, próbując wykryć, czy dane zostały zmodyfikowane:

..., SQLAlchemy implementuje własną funkcję „autocommit”, która działa całkowicie spójnie we wszystkich backendach. Osiąga się to poprzez wykrywanie instrukcji, które reprezentują operacje zmieniające dane, tj. INSERT, UPDATE, DELETE, a także instrukcji języka definicji danych (DDL), takich jak CREATE TABLE, ALTER TABLE, a następnie automatyczne wydawanie COMMIT, jeśli żadna transakcja nie jest w toku . Wykrywanie opiera się na obecności autocommit=True opcja wykonania na wyciągu. Jeśli instrukcja jest instrukcją tylko tekstową, a flaga nie jest ustawiona, wyrażenie regularne jest używane do wykrywania INSERT, UPDATE, DELETE, a także wielu innych poleceń dla określonego zaplecza

Ponieważ wiele zestawów wyników nie jest obsługiwanych na poziomie SQLAlchemy, w pierwszym przykładzie wykrywanie po prostu pomija wydawanie polecenia COMMIT, ponieważ pierwszy instrukcja jest SELECT, gdzie jak w twoim drugim przykładzie jest to UPDATE. Nie ma próby wykrycia instrukcji modyfikujących dane z wielu instrukcji.

Jeśli spojrzysz na PGExecutionContext.should_autocommit_text() , zobaczysz, że pasuje do wyrażenia regularnego z AUTOCOMMIT_REGEXP . Innymi słowy, pasuje tylko na początku tekstu.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Rekurencyjne dołączanie do Postgresql

  2. Badanie spowolnienia PostGIS (edycja 2019)

  3. Jeden system bezpieczeństwa dla aplikacji, puli połączeń i PostgreSQL — przypadek LDAP

  4. Błąd Postgresa podczas aktualizowania danych w kolumnie

  5. Zainstaluj PostgreSQL na Ubuntu 18.04