Изменения в данных БД, не отраженные в наборе запросов Django в скрипте с непрерывным циклом
Я использую ORM Django для получения новых добавленных записей из БД и передачи их в очередь сообщений. Я делаю это в бесконечном цикле while, ПРОБЛЕМА в каждой итерации цикла. Я получаю один и тот же набор запросов, даже когда добавляю / удаляю / редактирую записи, когда этот скрипт выполняется,
Код выглядит так:
while True :
sleep(10 seconds)
# Below is the problem line, I get the same query-set every time in new_objects
# even when I have added/deleted/edited entries while this daemon is running.
new_objects = Model.objects.filter(some condition)
# Process new_objects and send them to MQ
.
. and so on
Что я должен сделать, чтобы отразить последние данные в каждой итерации?
1 ответ
Решение
Это не имеет ничего общего с кэшированием. Это связано с транзакциями.
Непрерывно работающий скрипт по умолчанию выполняется в пределах одной транзакции и поэтому никогда не увидит изменений вне этой транзакции. Вам нужно будет начинать новую транзакцию вручную на каждой итерации - посмотрите, как это сделать, в документации по транзакции.