Karena Python DB API secara default dalam mode AUTOCOMMIT=OFF, dan (setidaknya untuk MySQLdb) pada level isolasi REPEATABLE READ. Ini berarti bahwa di balik layar Anda memiliki transaksi basis data yang sedang berlangsung (InnoDB adalah mesin transaksional) di mana akses pertama ke baris yang diberikan (atau mungkin bahkan tabel, saya tidak yakin) memperbaiki "tampilan" sumber daya ini untuk bagian yang tersisa dari transaksi.
Untuk mencegah perilaku ini, Anda harus 'menyegarkan' transaksi saat ini:
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)
-- perhatikan bahwa transaction.autocommit dekorator hanya untuk memasuki mode manajemen transaksi (ini juga dapat dilakukan secara manual menggunakan fungsi transaction.enter_transaction_management/leave_transaction_managemen).
Satu hal lagi - untuk diperhatikan - autocommit Django bukanlah autocommit yang sama dengan yang Anda miliki di database - ini sepenuhnya independen. Tapi ini di luar cakupan untuk pertanyaan ini.
Diedit pada 22/01/2012
Di sini adalah "jawaban kembar" untuk pertanyaan serupa.