Django模型检索相同的结果

时间:2012-12-07 16:52:15

标签: python django orm django-models

我在SQL数据库上有一个django模型TestModel。

每当我做

TestModel.objects.all()

如果我从同一个进程多次运行它,我似乎得到了相同的结果。我通过手动删除(不使用任何django基元)从构建模型的表中的一行来测试,查询仍然返回相同的结果,即使删除后显然应该有更少的对象。

是否存在某种缓存机制,每次我想检索对象时django都没有进入数据库?

如果有,有没有办法我仍然可以强制django在每个查询上转到数据库,最好不要编写原始SQL查询?

我还应该指定通过重新启动进程,模型再次返回正确的对象,我不再看到已删除的对象,但如果我再删除一些问题,则会再次出现问题。

2 个答案:

答案 0 :(得分:1)

这是因为您的数据库隔离级别是可重复读取的。在django shell中,所有请求都包含在单个事务中。

<强>被修改

你可以试试你的shell:

from django.db import transaction
with transaction.autocommit():
    t = TestModel.objects.all()
    ...

答案 1 :(得分:-1)

听起来像是db事务问题。如果您在单独进入数据库本身并修改数据时保持shell会话处于打开状态,那么在shell中打开的事务将不会因隔离而看到更改。在看到它们之前,您需要退出并重新加载shell以获取新事务。

请注意,在生产中,事务与请求/响应周期相关联,因此这不是一个重要问题。