Użyj zdarzenia sesji do wykonania dowolnej instrukcji SQL przy każdej nowej transakcji. Możesz także używać zdarzeń na poziomie połączenia, zależy to od przypadku użycia.
Oto jak zrobiłbym to na poziomie sesji:
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')
Jeśli nie masz pewności, który sposób działa dla Ciebie, po prostu wypróbuj je, napisz kilka przypadków testowych i dowiedz się, czy to działa dla Ciebie.
Może być jedno zastrzeżenie (niepewne):ponieważ połączenie nie jest zrywane, ale zwracane do puli, ustawienie może się utrzymywać. W takim przypadku możesz również chcieć dołączyć coś, aby przywrócić domyślne, np. na after_flush
wydarzenie. Nie jestem do końca pewien, możesz poeksperymentować. Jeśli nie jest to konieczne, możesz również użyć after_begin
zdarzenie, ale nie ma prawdziwego before_close
wydarzenie, które go otacza, więc może powodować problemy.