因为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装饰器仅用于进入事务管理模式(这也可以使用transaction.enter_transaction_management / leave_transaction_managemen函数手动完成)。
需要注意的另一件事-Django的自动提交与数据库中的自动提交不同,它是完全独立的。但这超出了这个问题的范围。
于22/01/2012修改
这是一个类似问题的“双答案”。



