Използвайте сесия събитие за изпълнение на произволен 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
събитие, което го обвива, така че може да създаде проблеми.