Я использую модели базы данных Django из процесса, который не вызывается из HTTP-запроса. Предполагается, что процесс будет обрабатывать новые данные каждые несколько секунд и выполнять некоторую обработку на нем. У меня есть цикл, который спит в течение нескольких секунд, а затем получает все необработанные данные из базы данных.
Что я вижу, так это то, что после первой выборки процесс никогда не видит никаких новых данных. Я провел несколько тестов, и похоже, что Django - это кеширование результатов, хотя я каждый раз создаю новые QuerySets. Чтобы проверить это, я сделал это из оболочки Python:
>>> MyModel.objects.count()
885
# (Here I added some more data from another process.)
>>> MyModel.objects.count()
885
>>> MyModel.objects.update()
0
>>> MyModel.objects.count()
1025
Как вы можете видеть, добавление новых данных не изменяет счетчик результатов. Однако вызов метода update() менеджера, как представляется, устраняет проблему.
Я не могу найти документацию по этому методу update() и не знаю, какие другие плохие вещи он может сделать.
Мой вопрос: почему я вижу это поведение кэширования, что противоречит тому, что говорят Django docs? И как я могу предотвратить это?