首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >当我进入django shell时,为什么它会‘冻结’数据库

当我进入django shell时,为什么它会‘冻结’数据库
EN

Stack Overflow用户
提问于 2012-05-27 11:22:16
回答 2查看 465关注 0票数 0

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

代码语言:javascript
运行
复制
>>> 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

和被调用的方法:

代码语言:javascript
运行
复制
# in `UserProfile` class
def get_jobs_applied_for(self):
    jobs_applied_for = self.jobapplication_set.order_by('-timestamp')
    return jobs_applied_for

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-05-27 12:02:46

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

票数 -1
EN

Stack Overflow用户

发布于 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查询。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10771430

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档