I came across behavior that I thought was some kind of caching, but it turned out to be database transactions fooling me.
I had the problem where in another process, items were get added to the database, and I wanted to monitor progress of the other process, so I opened up a django shell and issued the following:
>>> MyData.objects.count()
74674
>>> MyData.objects.count()
74674
The value wasn't changing, even though it actually was in the database. I realized that at least with the way I had MySQL & django setup that I was in a transaction and would only see a "snapshot" of the database at the time I opened the transaction.
Since with views in django, I had autocommit behavior defined, this was fine for each view to only see a snapshot, as the next time a view was called it would be in a different transaction. But for a piece of code that was not automatically committing, it would not see any changes in the db except those that were made in this transaction.
Just thought I would toss this answer in for anyone who may come upon this situation.
To solve, commit your transaction, which can be manually done like so:
>> from django.db import transaction
>> transaction.enter_transaction_management()
>> transaction.commit() # Whenever you want to see new data
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…