2

I am using Django's ORM to get newly added entries from a Db and pass them to a Messaging queue. I am doing this in an infinite while loop , The PROBLEM in every loop iteration I am getting the same queryset even when I have added/deleted/edited entries when this script is running,

The code goes like this :

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

What should I do to reflect the latest data in each iteration ?

PKaura
  • 199
  • 3
  • 9

1 Answers1

4

This isn't anything to do with caching. This is to do with transactions.

A continuously-running script by default runs within a single transaction, and so will never see changes outside that transaction. You'll need to start a new transaction manually on every iteration - see the transaction documentation on how to do that.

Daniel Roseman
  • 588,541
  • 66
  • 880
  • 895
  • Thanks a ton Daniel, "A continuously-running script by default runs within a single transaction" this exactly was the problem. All I had to do was manually commit the transaction in each iteration and the changes started showing up. – PKaura Aug 05 '11 at 12:40