Utilizzare un evento sessione per eseguire un'istruzione SQL arbitraria su ogni nuova transazione. Puoi anche utilizzare gli eventi a livello di connessione, dipende dal tuo caso d'uso.
Ecco come lo farei a livello di sessione:
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')
Se non sei sicuro di quale sia il metodo che fa per te, provali, scrivi alcuni casi di test e scopri se funziona per te.
Potrebbe esserci un avvertimento (incerto):poiché la connessione non viene interrotta ma restituita al pool, l'impostazione potrebbe persistere. In questo caso potresti anche voler allegare qualcosa per ripristinare l'impostazione predefinita, ad es. sul after_flush
evento. Non sono del tutto sicuro su questo, potresti voler sperimentare. Se ciò non è necessario, puoi anche usare after_begin
evento, ma non esiste un vero before_close
evento che lo avvolge, quindi potrebbe creare problemi.