Đây là từ django docs on the queryset iterator()
method:Khi sử dụng hay không sử dụng iterator() trong ORM django
Một QuerySet thường lưu trữ kết quả của nó trong nội bộ để đánh giá lặp đi lặp lại không dẫn đến truy vấn bổ sung. Ngược lại, iterator() sẽ đọc kết quả trực tiếp, mà không thực hiện bất kỳ bộ nhớ đệm nào ở cấp QuerySet (trong nội bộ, các defaul t iterator calls iterator() và lưu trữ giá trị trả về). Đối với một QuerySet mà trả về một số lượng lớn các đối tượng mà bạn chỉ cần truy cập một lần, điều này có thể dẫn đến hiệu suất tốt hơn và giảm đáng kể bộ nhớ.
Sau khi đọc, tôi vẫn còn bối rối: Dòng về hiệu suất tăng và giảm bộ nhớ cho thấy chúng ta chỉ nên sử dụng phương pháp iterator()
. Ai đó có thể đưa ra một số ví dụ về trường hợp tốt và xấu iterator()
sử dụng?
Ngay cả khi kết quả truy vấn không được lưu trong bộ nhớ cache, nếu chúng thực sự muốn truy cập vào các mô hình nhiều lần, thì không ai có thể làm như sau?
saved_queries = list(Model.objects.all().iterator())
Tôi nghĩ rằng đó là vấn đề về kích thước mô hình ... nếu lớn của nó thì có thể bạn không muốn bị treo cổ trong bộ nhớ ... –