Gebruik een sessie-evenement om bij elke nieuwe transactie een willekeurige SQL-instructie uit te voeren. U kunt ook gebeurtenissen op verbindingsniveau gebruiken, dit hangt af van uw gebruikssituatie.
Hier is hoe ik het zou doen op sessieniveau:
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')
Als je niet zeker weet welke manier voor jou werkt, probeer ze dan gewoon, schrijf wat testcases en ontdek of dat voor jou werkt.
Er kan een waarschuwing zijn (onzeker):aangezien de verbinding niet wordt verbroken maar wordt teruggestuurd naar de pool, kan de instelling blijven bestaan. In dit geval wil je misschien ook iets toevoegen om de standaard te herstellen, b.v. op de after_flush
evenement. Ik ben hier niet helemaal zeker van, misschien wil je experimenteren. Als dit niet nodig is, kunt u ook de after_begin
. gebruiken evenement, maar er is geen echte before_close
gebeurtenis die het omhult, dus het kan problemen veroorzaken.