Python DB APIは、デフォルトでAUTOCOMMIT =OFFモードであり、(少なくともMySQLdbの場合)REPEATABLEREAD分離レベルであるためです。これは、バックグラウンドで進行中のデータベーストランザクション(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に注意してください デコレータは、トランザクション管理モードに入るためだけのものです(これは、transaction.enter_transaction_management / Leave_transaction_managemen関数を使用して手動で行うこともできます)。
もう1つ、注意が必要ですが、Djangoの自動コミットは、データベースにある自動コミットとは異なり、完全に独立しています。しかし、これはこの質問の範囲外です。
2012年1月22日に編集
こちら 同様の質問に対する「双子の答え」です。