Der übliche Grund für Leute, die denken, dass neben der üblichen SQLAlchemy-Identitätskarte, die für eine Transaktion lokal ist, ein "Cache" im Spiel ist, ist, dass sie die Auswirkungen der Transaktionsisolation beobachten. Die Sitzung von SQLAlchemy arbeitet standardmäßig in einem Transaktionsmodus, dh sie wartet bis session.commit()
wird aufgerufen, um Daten in der Datenbank zu speichern. Während dieser Zeit werden andere Transaktionen, die an anderer Stelle ausgeführt werden, diese Daten nicht sehen.
Aufgrund der isolierten Natur von Transaktionen gibt es jedoch eine zusätzliche Wendung. Diese anderen laufenden Transaktionen sehen nicht nur die Daten Ihrer Transaktion nicht, bis sie festgeschrieben sind, sie können sie in einigen Fällen auch nicht sehen, bis sie festgeschrieben oder rückgängig gemacht werden also (das ist der gleiche Effekt, den dein close() hier hat). Eine Transaktion mit einem durchschnittlichen Grad an Isolation wird den bisher geladenen Zustand beibehalten und Ihnen weiterhin denselben Zustand lokal für die Transaktion geben, auch wenn sich die tatsächlichen Daten geändert haben - dies wird als wiederholbare Lesevorgänge bezeichnet in der Terminologie der Transaktionsisolation.
http://en.wikipedia.org/wiki/Isolation_%28database_systems%29