当用户通过python manage.py runserver
进入django shell时,为什么数据库保持静态?例如:
>>> from userprofile.models import UserProfile
>>> up=UserProfile.objects.get(id=4)
>>> up.get_jobs_applied_for()
[<JobApplication: david - Editor>, <JobApplication: david - Assistant Director>]
# delete entries in the mysql database
>>> up.get_jobs_applied_for()
[<JobApplication: david - Editor>, <JobApplication: david - Assistant Director>]
# but the results do not reflect that
所谓的方法:
# in `UserProfile` class
def get_jobs_applied_for(self):
jobs_applied_for = self.jobapplication_set.order_by('-timestamp')
return jobs_applied_for
为什么不实时查询数据库?
答案 0 :(得分:1)
正如Matthew Schinckel所问,删除的时间和地点何时何地发生?如果它发生在另一个进程中,在第二个>>> up.get_jobs_applied_for()
之前,并且您正在使用设置为REPEATABLE READ
的隔离级别的MySQL,MySQL DB将在删除之前为您提供早期快照。 (假设您的问题中的代码在整个事务中运行,例如在托管事务或某些MySQL连接池中)
此外,您可以在行之间使用django.db.connection.queries
来确认Django是否尝试实际从DB进行查询。
答案 1 :(得分:-1)
Django仅在您第一次执行需要执行查询的操作时填充QuerySet;之后,它在内存中保留相同的结果集。 order_by()不会强制对数据库执行另一个查询。