Brug en sessionsbegivenhed at udføre en vilkårlig SQL-sætning på hver ny transaktion. Du kan også bruge hændelser på forbindelsesniveauet, det afhænger af din use case.
Sådan ville jeg gøre det på sessionsniveau:
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')
Hvis du er usikker på, hvilken vej der virker for dig, så prøv dem bare, skriv nogle testcases og find ud af, om det virker for dig.
Der kan være en advarsel (usikker):Da forbindelsen ikke afbrydes, men returneres til poolen, kan indstillingen fortsætte. I dette tilfælde vil du måske også vedhæfte noget for at gendanne standarden, f.eks. på after_flush
begivenhed. Jeg er ikke helt sikker på dette, du vil måske prøve. Hvis dette er unødvendigt, kan du også bruge after_begin
begivenhed, men der er ingen reel before_close
begivenhed, der ombryder det, så det kan skabe problemer.