Use um evento de sessão para executar uma instrução SQL arbitrária em cada nova transação. Você também pode usar eventos no nível de conexão, depende do seu caso de uso.
Aqui está como eu faria isso no nível da sessão:
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 você não tiver certeza de qual caminho funciona para você, experimente-os, escreva alguns casos de teste e descubra se isso funciona para você.
Pode haver uma ressalva (não tenho certeza):Como a conexão não é interrompida, mas retornada ao pool, a configuração pode persistir. Nesse caso, você também pode querer anexar algo para restaurar o padrão, por exemplo. no
after_flush
evento. Eu não estou totalmente certo sobre este, você pode querer experimentar. Se isso for desnecessário, você também pode usar o after_begin
evento, mas não há before_close
real evento que o envolve, para que possa criar problemas.