Gunakan acara sesi untuk mengeksekusi pernyataan SQL arbitrer pada setiap transaksi baru. Anda juga dapat menggunakan acara pada tingkat koneksi, itu tergantung pada kasus penggunaan Anda.
Inilah cara saya melakukannya di tingkat sesi:
Session = sessionmaker()
@event.listens_for(Session, 'before_flush')
def set_max_heap_table_size(session, transaction, connection):
session.execute('SET max_heap_table_size = 1024 * 1024 * 64')
Jika Anda tidak yakin cara mana yang cocok untuk Anda, coba saja, tulis beberapa kasus uji, dan cari tahu apakah cara itu cocok untuk Anda.
Mungkin ada satu peringatan (tidak yakin):Karena koneksi tidak terputus tetapi dikembalikan ke kumpulan, pengaturan mungkin tetap ada. Dalam hal ini Anda mungkin juga ingin melampirkan sesuatu untuk mengembalikan default, mis. pada after_flush
peristiwa. Saya tidak sepenuhnya yakin dengan yang satu ini, Anda mungkin ingin bereksperimen. Jika ini tidak perlu, Anda juga dapat menggunakan after_begin
acara, tetapi tidak ada before_close
yang sebenarnya peristiwa yang membungkusnya, sehingga dapat menimbulkan masalah.