Django 缓存查询(我不想这样)

Django caching queries (I don't want it to)

所以我目前在 Python/Django 工作,我遇到了 Django 缓存查询集的问题 "within a session"。

如果我 运行 python manage.py shell 并且这样做:

>>> from myproject.services.models import *
>>> test = TestModel.objects.filter(pk = 5)
>>> print test[0].name
>>> John

现在,如果我直接在 SQL 中将其更新为 Bob 并再次 运行 更新,它仍然会说 John。但是,如果我按 CTRL+D 退出(退出)和 运行 同样的事情,它将更新并现在将打印 Bob.

我的问题是我运行在屏幕上使用 SOAP 服务,它总是return相同的结果,即使数据发生变化也是如此。

我需要一种方法来强制查询再次从数据库中实际提取数据,而不仅仅是提取缓存数据。我可以只使用原始查询,但对我来说这不是解决方案,有什么想法吗?

查询集未缓存 'within a session'。

Django documentation: Caching and QuerySets提到:

Each QuerySet contains a cache to minimize database access. Understanding how it works will allow you to write the most efficient code.

In a newly created QuerySet, the cache is empty. The first time a QuerySet is evaluated – and, hence, a database query happens – Django saves the query results in the QuerySet’s cache and returns the results that have been explicitly requested (e.g., the next element, if the QuerySet is being iterated over). Subsequent evaluations of the QuerySet reuse the cached results.

Keep this caching behavior in mind, because it may bite you if you don’t use your QuerySets correctly.

(强调我的)

有关何时评估查询集的更多信息,请参阅this link

如果更新查询集对您的应用程序至关重要,则您必须每次都对其进行评估,无论是在单个视图函数中还是使用 ajax。

这就像运行一次又一次的SQL查询。就像以前没有查询集可用并且您将数据保存在必须刷新的某种结构中一样。