PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

Изпълнението на множество оператори с Postgresql чрез SQLAlchemy не запазва промените

Начинът, по който работи автокомитът на SQLAlchemy е, че проверява издадените оператори, опитвайки се да открие дали данните са променени или не:

..., SQLAlchemy внедрява своя собствена функция за „автоматично записване“, която работи напълно последователно във всички бекендове. Това се постига чрез откриване на оператори, които представляват операции за промяна на данните, т.е. INSERT, UPDATE, DELETE, както и изрази на езика за дефиниране на данни (DDL) като CREATE TABLE, ALTER TABLE и след това автоматично издаване на COMMIT, ако не е в ход транзакция . Откриването се основава на наличието на autocommit=True опция за изпълнение на изявлението. Ако изразът е само текстов израз и флагът не е зададен, се използва регулярен израз за откриване на INSERT, UPDATE, DELETE, както и различни други команди за конкретен бекенд

Тъй като множество набори от резултати не се поддържат на ниво SQLAlchemy, във вашия първи пример откриването просто пропуска издаването на COMMIT, тъй като първият изразът е SELECT, където както във втория ви пример е UPDATE. Не се извършва опит за откриване на оператори за модифициране на данни от множество оператори.

Ако погледнете PGExecutionContext.should_autocommit_text() , ще видите, че прави съответствие с регулярен израз срещу AUTOCOMMIT_REGEXP . С други думи, съвпада само в началото на текста.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Заявка с LEFT JOIN не връща редове за брой 0

  2. psql:ФАТАЛНО:ролята postgres не съществува

  3. Прословутото java.sql.SQLException:Не е намерен подходящ драйвер

  4. Read Committed е задължително за Postgres-съвместими разпределени SQL бази данни

  5. Най-добрите ресурси за обучение и обучение на PostgreSQL