How to disable Django query cache?
caching, database, django
Solution
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
Problem
In my Django application, I repeatedly run the same query on my database (e.g. every 10 seconds). I then create an MD5 sum over the queryset I receive and compare that to the MD5 sum I created in the previous run. If both are equal, the data has not changed and the web page does not need updating. While I do this, the data in the DB might change. However, the query returns the same queryset, apparently due to query caching. How can I disable the query cache and explicitely execute the query on the DB ?