【问题标题】:Django prefetch_related cache not reflecting the changesDjango prefetch_related 缓存不反映更改
【发布时间】:2018-08-11 10:33:27
【问题描述】:

我有一个模型银行。我有六个实体

这是我的预取代码。

queryset = Banks.objects.all().prefetch_related('field1','field2')

当我在我的银行模型中输入新实体并获取数据时,我仍然只得到旧数据。下载数据时没有反映新添加的实体。

【问题讨论】:

  • 请添加更多关于您在做什么以及如何做的信息。你“下载”数据?另外,你在“进入新条目”之后真的打电话给bank_instance.save()了吗?
  • 我的数据存储在数据库中,我可以在 phpmyadmin 中看到。

标签: python django python-3.x django-models django-rest-framework


【解决方案1】:

请记住,与 QuerySet 一样,任何暗示不同数据库查询的后续链接方法都将忽略以前缓存的结果,并使用新的数据库查询检索数据。因此,如果您编写以下内容:

>>> pizzas = Pizza.objects.prefetch_related('toppings')
>>> [list(pizza.toppings.filter(spicy=True)) for pizza in pizzas]

...那么pizza.toppings.all() 已被预取的事实对您没有帮助。 prefetch_related('toppings') 隐含pizza.toppings.all(),但pizza.toppings.filter() 是一个新的不同查询。预取的缓存在这里无能为力;事实上,它会损害性能,因为您已经完成了一个未使用的数据库查询。所以请谨慎使用此功能!

此外,如果您在相关管理器上调用数据库更改方法add()remove()clear()set(),则该关系的任何预取缓存都将被清除。

来自docs

【讨论】:

  • 我没听懂你。您能否更具体地说明如何清除缓存。
猜你喜欢
  • 1970-01-01
  • 2014-11-26
  • 1970-01-01
  • 1970-01-01
  • 2021-08-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多