Použijte událost relace pro provedení libovolného příkazu SQL při každé nové transakci. Můžete také použít události na úrovni připojení, záleží na vašem případu použití.
Zde je návod, jak bych to udělal na úrovni relace:
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')
Pokud si nejste jisti, který způsob pro vás funguje, prostě je vyzkoušejte, napište nějaké testovací případy a zjistěte, zda to funguje pro vás.
Může existovat jedno upozornění (nejisté):Vzhledem k tomu, že připojení není přerušeno, ale vráceno do fondu, může nastavení přetrvávat. V tomto případě můžete také chtít připojit něco pro obnovení výchozího nastavení, např. na after_flush
událost. Nejsem si tím úplně jistý, možná budete chtít experimentovat. Pokud to není nutné, můžete také použít after_begin
událost, ale neexistuje žádný skutečný before_close
událost, která to zabalí, takže by to mohlo způsobit problémy.