Django prefetch_相关的缓存未反映更改

2024-05-12 19:28:06 发布

您现在位置:Python中文网/ 问答频道 /正文

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

这是我的预取代码。在

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

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


Tags: 数据代码模型实体objects银行allqueryset
1条回答
网友
1楼 · 发布于 2024-05-12 19:28:06

请记住,与QuerySets一样,任何后续的链式方法(暗示不同的数据库查询)将忽略先前缓存的结果,并使用新的数据库查询检索数据。所以,如果你写下:

>>> 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(),但是{}是一个新的和不同的查询。预取缓存在这里没有帮助;实际上,它会影响性能,因为您已经完成了一个尚未使用的数据库查询。所以请谨慎使用此功能!在

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

来自docs

相关问题 更多 >