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