Използвайте сесия събитие за изпълнение на произволен SQL оператор за всяка нова транзакция. Можете също да използвате събития на ниво връзка, зависи от вашия случай на използване.
Ето как бих го направил на ниво сесия:
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')
Ако не сте сигурни кой начин работи за вас, просто ги опитайте, напишете някои тестови случаи и разберете дали това работи за вас.
Може да има едно предупреждение (несигурно):Тъй като връзката не е прекъсната, а се връща в пула, настройката може да остане. В този случай може да искате да прикачите нещо, за да възстановите стойността по подразбиране, напр. на after_flush събитие. Не съм напълно сигурен в това, може да искате да експериментирате. Ако това не е необходимо, можете също да използвате after_begin събитие, но няма реален before_close събитие, което го обвива, така че може да създаде проблеми.