Mysql
 sql >> Datenbank >  >> RDS >> Mysql

set session in einem SQLAlchemy-Sitzungsobjekt

Verwenden Sie ein Sitzungsereignis bei jeder neuen Transaktion eine beliebige SQL-Anweisung auszuführen. Sie können Ereignisse auch auf Verbindungsebene verwenden, dies hängt von Ihrem Anwendungsfall ab.

So würde ich es auf Sitzungsebene machen:

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')

Wenn Sie sich nicht sicher sind, welcher Weg für Sie funktioniert, probieren Sie ihn einfach aus, schreiben Sie einige Testfälle und finden Sie heraus, ob das für Sie funktioniert.

Es kann eine Einschränkung geben (nicht sicher):Da die Verbindung nicht getrennt, sondern an den Pool zurückgegeben wird, kann die Einstellung bestehen bleiben. In diesem Fall möchten Sie vielleicht auch etwas anhängen, um den Standard wiederherzustellen, z. auf after_flush Veranstaltung. Ich bin mir nicht ganz sicher, vielleicht möchten Sie experimentieren. Wenn dies unnötig ist, können Sie auch den after_begin verwenden Ereignis, aber es gibt kein echtes before_close Ereignis, das es umschließt, sodass Probleme entstehen können.