Utilisez un événement de session pour exécuter une instruction SQL arbitraire à chaque nouvelle transaction. Vous pouvez également utiliser des événements au niveau de la connexion, cela dépend de votre cas d'utilisation.
Voici comment je procéderais au niveau de la session :
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')
Si vous n'êtes pas sûr de la méthode qui vous convient, essayez-les, rédigez des cas de test et découvrez si cela fonctionne pour vous.
Il peut y avoir une mise en garde (incertain) :étant donné que la connexion n'est pas interrompue mais renvoyée au pool, le paramètre peut persister. Dans ce cas, vous pouvez également joindre quelque chose pour restaurer la valeur par défaut, par ex. sur le after_flush
un événement. Je ne suis pas tout à fait sûr de celui-ci, vous voudrez peut-être expérimenter. Si cela n'est pas nécessaire, vous pouvez également utiliser le after_begin
événement, mais il n'y a pas de véritable before_close
événement qui l'enveloppe, ce qui pourrait créer des problèmes.