当用户通过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为什么不实时查询数据库?
发布于 2012-05-27 12:02:46
Django仅在您第一次执行需要执行查询的操作时才填充QuerySet;之后,它会将相同的结果集保留在内存中。order_by()不会强制对数据库执行另一个查询。
发布于 2012-05-27 14:02:24
正如Matthew Schinckel所问的,删除发生在何时何地?如果它发生在另一个进程中,在第二个>>> up.get_jobs_applied_for()之前,并且您正在使用隔离级别设置为REPEATABLE READ的MySQL,则MySQL DB将在删除之前为您提供一个较早的快照。(假设问题中的代码在整个事务中运行,例如在托管事务中或在某个MySQL连接池中运行)
此外,您可以在行之间使用django.db.connection.queries来确认Django是否真的尝试从DB查询。
https://stackoverflow.com/questions/10771430
复制相似问题