0

当用户通过 django shell 进入时,为什么数据库保持静态python manage.py runserver?例如:

>>> 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

为什么它不实时查询数据库?

4

2 回答 2

1

正如 Matthew Schinckel 所问,删除发生在何时何地?如果它发生在第二个之前的另一个进程中>>> up.get_jobs_applied_for(),并且您正在使用隔离级别设置为REPEATABLE READ的 MySQL,则 MySQL DB 会在删除之前为您提供较早的快照。(假设您问题中的代码在整个事务中运行,例如在托管事务中或在某些 MySQL 连接池中)

此外,您可以在行django.db.connection.queries间使用来确认 Django 是否实际上尝试从 DB 查询。

于 2012-05-27T06:02:23.623 回答
-1

Django 仅在您第一次执行需要执行查询的操作时填充 QuerySet;之后,它将相同的结果集保存在内存中。order_by() 不会强制对数据库执行另一个查询。

于 2012-05-27T04:02:46.457 回答