Используйте команду session event для выполнения произвольной инструкции SQL для каждой новой транзакции. Вы также можете использовать события на уровне соединения, это зависит от вашего варианта использования.
Вот как я хотел бы сделать это на уровне сеанса:
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')
Если вы не уверены, какой способ работает для вас, просто попробовать их, написать несколько тестов и выяснить, если это работает для вас.
Возможно, существует одно предостережение (unsure): поскольку соединение не отбрасывается, но возвращается в пул, настройка может сохраняться. В этом случае вы также можете прикрепить что-то, чтобы восстановить значение по умолчанию, например. на мероприятии after_flush
. Я не совсем уверен в этом, вы можете экспериментировать. Если это не нужно, вы также можете использовать событие after_begin
, но нет реального события before_close
, который его обертывает, поэтому он может создавать проблемы.
Спасибо! Будет ли after_begin() быть лучшим обратным вызовом для этого? Есть ли вероятность, что вы можете привести пример кода о том, как я буду это делать? – Suman
@Suman см. Мое редактирование. 'after_begin' - хорошая идея, но, как я уже сказал, это может вызвать проблемы, если вам нужно сбросить настройки в конце. – javex