क्योंकि Python DB API डिफ़ॉल्ट रूप से AUTOCOMMIT=OFF मोड में है, और (कम से कम MySQLdb के लिए) रिपीटेबल रीड आइसोलेशन स्तर पर है। इसका मतलब यह है कि पर्दे के पीछे आपके पास एक चालू डेटाबेस लेनदेन है (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 डेकोरेटर केवल लेनदेन प्रबंधन मोड में प्रवेश करने के लिए है (यह लेनदेन.enter_transaction_management/leave_transaction_managemen फ़ंक्शन का उपयोग करके मैन्युअल रूप से भी किया जा सकता है)।
एक और बात - जागरूक होने के लिए - Django का ऑटोोकॉमिट वही ऑटोोकॉमिट नहीं है जो आपके पास डेटाबेस में है - यह पूरी तरह से स्वतंत्र है। लेकिन यह इस प्रश्न के दायरे से बाहर है।
22/01/2012 को संपादित
यहाँ इसी तरह के प्रश्न का "जुड़वां उत्तर" है।