Använd en sessionshändelse att exekvera en godtycklig SQL-sats på varje ny transaktion. Du kan också använda händelser på anslutningsnivå, det beror på ditt användningsfall.
Så här skulle jag göra det på sessionsnivå:
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')
Om du är osäker på vilket sätt som fungerar för dig, prova dem, skriv några testfall och ta reda på om det fungerar för dig.
Det kan finnas en varning (osäker):Eftersom anslutningen inte bryts utan återgår till poolen kan inställningen kvarstå. I det här fallet kanske du också vill bifoga något för att återställa standarden, t.ex. på after_flush
händelse. Jag är inte helt säker på det här, du kanske vill experimentera. Om detta är onödigt kan du också använda after_begin
händelse, men det finns ingen riktig before_close
händelse som omsluter det, så det kan skapa problem.