Mysql
 sql >> Database >  >> RDS >> Mysql

Come disabilitare la memorizzazione nella cache di SQLAlchemy?

La solita causa per cui le persone pensano che ci sia una "cache" in gioco, oltre alla solita mappa dell'identità di SQLAlchemy che è locale per una transazione, è che stanno osservando gli effetti dell'isolamento della transazione. La sessione di SQLAlchemy funziona per impostazione predefinita in modalità transazionale, il che significa che attende fino a session.commit() viene chiamato per rendere persistenti i dati nel database. Durante questo periodo, le altre transazioni in corso altrove non vedranno questi dati.

Tuttavia, a causa della natura isolata delle transazioni, c'è una svolta in più. Quelle altre transazioni in corso non solo non vedranno i dati della tua transazione fino a quando non verrà eseguito il commit, ma in alcuni casi non potranno nemmeno vederlo fino a quando non vengono confermati o ripristinati anche (che è lo stesso effetto che il tuo close() sta avendo qui). Una transazione con un grado medio di isolamento manterrà lo stato che ha caricato finora e continuerà a fornirti lo stesso stato locale per la transazione anche se i dati reali sono cambiati:questo è chiamato letture ripetibili nel gergo dell'isolamento delle transazioni.

http://en.wikipedia.org/wiki/Isolation_%28database_systems%29