La cause habituelle pour les personnes pensant qu'il y a un "cache" en jeu, en plus de la carte d'identité SQLAlchemy habituelle qui est locale à une transaction, est qu'ils observent les effets de l'isolation des transactions. La session de SQLAlchemy fonctionne par défaut en mode transactionnel, ce qui signifie qu'elle attend jusqu'à session.commit()
est appelée afin de conserver les données dans la base de données. Pendant ce temps, les autres transactions en cours ailleurs ne verront pas ces données.
Cependant, en raison de la nature isolée des transactions, il y a une tournure supplémentaire. Non seulement ces autres transactions en cours ne verront pas les données de votre transaction tant qu'elle n'aura pas été validée, mais elles ne pourront pas non plus les voir dans certains cas jusqu'à ce qu'elles soient validées ou annulées aussi (ce qui est le même effet que votre close() a ici). Une transaction avec un degré moyen d'isolement conservera l'état qu'il a chargé jusqu'à présent et continuera à vous donner le même état local à la transaction même si les données réelles ont changé - c'est ce qu'on appelle des lectures répétables dans le langage de l'isolation des transactions.
http://en.wikipedia.org/wiki/Isolation_%28database_systems%29