sql >> Databasteknik >  >> RDS >> Mysql

ställ in session i ett SQLAlchemy-sessionsobjekt

Använd en sessionshändelse att exekvera en godtycklig SQL-sats på varje ny transaktion. Du kan också använda händelser på anslutningsnivå, det beror på ditt användningsfall.

Så här skulle jag göra det på sessionsnivå:

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

Om du är osäker på vilket sätt som fungerar för dig, prova dem, skriv några testfall och ta reda på om det fungerar för dig.

Det kan finnas en varning (osäker):Eftersom anslutningen inte bryts utan återgår till poolen kan inställningen kvarstå. I det här fallet kanske du också vill bifoga något för att återställa standarden, t.ex. på after_flush händelse. Jag är inte helt säker på det här, du kanske vill experimentera. Om detta är onödigt kan du också använda after_begin händelse, men det finns ingen riktig before_close händelse som omsluter det, så det kan skapa problem.



  1. Hur man konverterar en korstabellsfråga tillbaka till en normal fråga i Access

  2. SQL:hur ordnar jag efter ett fält om det inte är null annars använd ett annat fält

  3. MySQL/MariaDB:skapa en pivottabellvy

  4. Konvertera MySQL:s POINT till text i PHP