Тъй като Python DB API е по подразбиране в режим AUTOCOMMIT=OFF и (поне за MySQLdb) на ниво на изолация REPEATABLE READ. Това означава, че зад кулисите имате текуща транзакция на база данни (InnoDB е транзакционен двигател), в която първият достъп до даден ред (или може би дори таблица, не съм сигурен) коригира "изгледа" на този ресурс за останалата част от транзакцията.
За да предотвратите това поведение, трябва да „опресните“ текущата транзакция:
from django.db import transaction
@transaction.autocommit
def my_count():
while True:
transaction.commit()
print "Number of Things: %d" % Thing.objects.count()
time.sleep(5)
-- обърнете внимание, че transaction.autocommit decorator е само за влизане в режим на управление на транзакциите (това може да се направи и ръчно с помощта на функциите transaction.enter_transaction_management/leave_transaction_managemen).
Още нещо - да знаете - автокомитът на Django не е същият автокомит, който имате в базата данни - той е напълно независим. Но това е извън обхвата на този въпрос.
Редактирано на 22/01/2012
Тук е „двоен отговор“ на подобен въпрос.