Chuyển đổi bộ truy vấn trên danh sách giá trị () sẽ tiết kiệm bộ nhớ hơn trên giá trị () trực tiếp. Vì phương thức giá trị () trả về một tập hợp truy vấn gồm danh sách các cặp dict (khóa: giá trị), nên giá trị_list () chỉ trả về danh sách các tuple (dữ liệu thuần túy). Nó sẽ tiết kiệm khoảng 50% bộ nhớ, chỉ cần thiết lập thông tin cột khi bạn gọi pd.DataFrame ().
Phương pháp 1:
queryset = models.xxx.objects.values ("A", "B", "C", "D")
df = pd.DataFrame (list (queryset)) ## ngốn nhiều bộ nhớ
#df = pd.DataFrame.from_records (queryset) ## hoạt động nhưng không có thay đổi nhiều về mức sử dụng bộ nhớ
Phương pháp 2:
queryset = models.xxx.objects.values_list ("A", "B", "C", "D")
df = pd.DataFrame (list (queryset), column = ["A", "B", "C", "D"]) ## điều này sẽ tiết kiệm 50% bộ nhớ
#df = pd.DataFrame.from_records (bộ câu hỏi, cột = ["A", "B", "C", "D"]) ## Nó không hoạt động. Đã gặp sự cố với kiểu dữ liệu là bộ truy vấn không phải danh sách.
Tôi đã thử nghiệm điều này trên dự án của mình với dữ liệu> 1 triệu hàng, bộ nhớ cao điểm được giảm từ 2G xuống 1G.