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.