Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/340.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 重用缓存的QuerySet以防止查询数据库_Python_Django_Python 2.7_Caching - Fatal编程技术网

Python 重用缓存的QuerySet以防止查询数据库

Python 重用缓存的QuerySet以防止查询数据库,python,django,python-2.7,caching,Python,Django,Python 2.7,Caching,我正试图尽可能减少我应用程序中某一部分的数据库点击次数,因为它们会对性能产生相当负面的影响 我使用任何QuerySet操作,如filter、exclude、Q对象等,对给定球员的比赛集进行各种筛选 player.game_set.filter(Q1) player.game_set.filter(Q2) player.game_set.exclude(Q3) 每次执行QuerySets集合时,数据库都会被命中 我想知道我是否能做到以下几点:只需点击数据库一次,即可获得玩家游戏的超集: play

我正试图尽可能减少我应用程序中某一部分的数据库点击次数,因为它们会对性能产生相当负面的影响

我使用任何
QuerySet
操作,如
filter
exclude
Q
对象等,对给定球员的比赛集进行各种筛选

player.game_set.filter(Q1)
player.game_set.filter(Q2)
player.game_set.exclude(Q3)
每次执行
QuerySet
s集合时,数据库都会被命中

我想知道我是否能做到以下几点:只需点击数据库一次,即可获得玩家游戏的超集:

player.game_set.all()
然后筛选缓存的
QuerySet
,但仍使用
QuerySet
操作,如
filter
exclude
Q
对象。这些将作用于缓存的
player.game\u set.all()
,而不是每次都击中底部


可以这样做吗?

不,像
.filter()
这样的方法构造一个新的查询集,查询集需要点击数据库才能得到结果。它永远不会尝试根据先前查询集的缓存结果在内存中执行等效操作。如果您发现查询速度较慢,可能是因为您没有最佳索引。请发布您的模型(以及它们的索引)否,像
.filter()
这样的方法构造一个新的查询集,查询集需要点击数据库才能获得结果。它永远不会尝试根据先前查询集的缓存结果在内存中执行等效操作。如果您发现查询速度较慢,可能是因为您没有最佳索引。请发布您的模型(及其索引)