Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/346.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/66.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 Django find_每个人(如RoR)_Python_Ruby On Rails_Django - Fatal编程技术网

Python Django find_每个人(如RoR)

Python Django find_每个人(如RoR),python,ruby-on-rails,django,Python,Ruby On Rails,Django,有没有办法在django中使用find_each 根据rails文档: 此方法仅适用于大批量生产 无法同时存储在内存中的记录数量。如果你 只需要循环少于1000条记录,可能会更好 只是使用常规的find方法 谢谢。一个可能的解决方案是使用内置的Paginator类(可以节省很多麻烦) 尝试以下方法: from django.core.paginator import Paginator from yourapp.models import YourModel result_query =

有没有办法在django中使用
find_each

根据rails文档:

此方法仅适用于大批量生产 无法同时存储在内存中的记录数量。如果你 只需要循环少于1000条记录,可能会更好 只是使用常规的find方法


谢谢。

一个可能的解决方案是使用内置的
Paginator
类(可以节省很多麻烦)

尝试以下方法:

from django.core.paginator import Paginator
from yourapp.models import YourModel

result_query = YourModel.objects.filter(<your find conditions>)

paginator = Paginator(result_query, 1000) # the desired batch size

for page in range(1, paginator.num_pages + 1):
   for row in paginator.page(page).object_list:
       # here you can add your required code
从django.core.paginator导入paginator
从yourapp.models导入YourModel
result\u query=YourModel.objects.filter()
paginator=paginator(结果查询,1000)#所需的批量大小
对于范围内的页面(1,paginator.num_pages+1):
对于paginator.page(page).object_列表中的行:
#您可以在这里添加所需的代码

或者,您可以根据需要使用来迭代结果。

您可以通过循环和切片查询集来查询整个表的部分内容

如果使用的是Debug=True,则在每次循环后刷新查询非常重要,因为这可能会导致内存问题(Django存储在脚本完成或终止之前运行的所有查询)

如果需要限制查询集的结果,可以将“.all()”替换为相应的“.filter(conditions)”

来自django导入数据库的

从myapp导入MyModel
#获取表中记录的总数
total_count=MyModel.objects.all().count()
chunk_size=1000#您可以将其更改为内存中可以保留的任何数量
检查的总数=0
检查总计数<总计数:
#查询所有对象并仅切片需要工作的零件
#此时使用(仅该部分将加载到内存中)
query\u set=MyModel.objects.all()[total\u checked:total\u checked+chunk\u size]
对于查询集合中的项:
#对结果做你需要做的事情
通过
检查的总大小+=块大小
#清除django的查询缓存以避免内存泄漏
db.reset_查询()

这当然解决了问题。但每种模型都应该这样做。在ruby中,有一种通用的方法来实现这一点。
from django import db
from myapp import MyModel

# Getting the total of records in the table
total_count = MyModel.objects.all().count()
chunk_size = 1000 # You can change this to any amount you can keep in memory
total_checked = 0

while total_checked < total_count:
    # Querying all the objects and slicing only the part you need to work
    # with at the moment (only that part will be loaded into memory)
    query_set = MyModel.objects.all()[total_checked:total_checked + chunk_size]

    for item in query_set:
        # Do what you need to do with your results
        pass

    total_checked += chunk_size

    # Clearing django's query cache to avoid a memory leak
    db.reset_queries()