PostgreSQL
 sql >> Teknologi Basis Data >  >> RDS >> PostgreSQL

Menjalankan beberapa pernyataan dengan Postgresql melalui SQLAlchemy tidak mempertahankan perubahan

Cara kerja autocommit SQLAlchemy adalah memeriksa pernyataan yang dikeluarkan, mencoba mendeteksi apakah data diubah atau tidak:

..., SQLAlchemy mengimplementasikan fitur "autocommit" sendiri yang bekerja sepenuhnya secara konsisten di semua backend. Hal ini dicapai dengan mendeteksi pernyataan yang mewakili operasi perubahan data, yaitu INSERT, UPDATE, DELETE, serta pernyataan bahasa definisi data (DDL) seperti CREATE TABLE, ALTER TABLE, dan kemudian mengeluarkan COMMIT secara otomatis jika tidak ada transaksi yang sedang berlangsung. . Deteksi didasarkan pada keberadaan autocommit=True opsi eksekusi pada pernyataan. Jika pernyataan adalah pernyataan teks saja dan bendera tidak disetel, ekspresi reguler digunakan untuk mendeteksi INSERT, UPDATE, DELETE, serta berbagai perintah lain untuk backend tertentu

Karena beberapa set hasil tidak didukung pada tingkat SQLAlchemy, dalam contoh pertama Anda, deteksi hanya menghilangkan mengeluarkan COMMIT karena pertama pernyataan adalah SELECT, di mana seperti pada contoh kedua Anda, itu adalah UPDATE. Tidak ada upaya untuk mendeteksi pernyataan modifikasi data dari beberapa pernyataan yang terjadi.

Jika Anda melihat PGExecutionContext.should_autocommit_text() , Anda akan melihat bahwa itu melakukan kecocokan ekspresi reguler dengan AUTOCOMMIT_REGEXP . Dengan kata lain hanya cocok di awal teks.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cara Mengatur Koneksi Jarak Jauh ke PostgreSQL

  2. Kueri PostgreSQL berjalan lebih cepat dengan pemindaian indeks, tetapi mesin memilih hash join

  3. Ekstensi PostgreSQL Favorit Saya - Bagian Kedua

  4. PG::InvalidParameterValue:ERROR:nilai tidak valid untuk parameter client_min_messages:panic

  5. Koneksi Django ke postgres oleh docker-compose