2024-05-12 19:28:06 发布
网友
我有一个银行模型。我有六个实体。在
这是我的预取代码。在
queryset = Banks.objects.all().prefetch_related('field1','field2')
当我在我的银行模型中输入新的实体并获取数据时,我仍然只得到旧的数据。当我下载数据时,新添加的实体没有得到反映。在
请记住,与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(),但是{}是一个新的和不同的查询。预取缓存在这里没有帮助;实际上,它会影响性能,因为您已经完成了一个尚未使用的数据库查询。所以请谨慎使用此功能!在
pizza.toppings.all()
prefetch_related('toppings')
另外,如果在相关管理器上调用数据库更改方法add()、remove()、clear()或{},则关系的任何预取缓存都将被清除。在
add()
remove()
clear()
来自docs
请记住,与QuerySets一样,任何后续的链式方法(暗示不同的数据库查询)将忽略先前缓存的结果,并使用新的数据库查询检索数据。所以,如果你写下:
…那么}是一个新的和不同的查询。预取缓存在这里没有帮助;实际上,它会影响性能,因为您已经完成了一个尚未使用的数据库查询。所以请谨慎使用此功能!在
pizza.toppings.all()
已被预取这一事实将不会对您有所帮助。prefetch_related('toppings')
隐含pizza.toppings.all()
,但是{另外,如果在相关管理器上调用数据库更改方法},则关系的任何预取缓存都将被清除。在
add()
、remove()
、clear()
或{来自docs
相关问题 更多 >
编程相关推荐