Lazy queryset

Tạo 1 QuerySet không đồng nghĩa với việc truy vấn CSDL

query = Entry.objects.filter(name="a")
query = query.exclude(id=1)
print(query)

Câu query trên chỉ thực hiện truy vấn 1 lần

  • Khi nào query được thực thi

    • Vòng lặp

    • Slicing

    • repr()

    • len()

    • list

    • bool( Nếu bạn chỉ muốn check 1 QuerySet có tồn tại hay không, sẽ cho tốc độ truy vấn nhanh và hiệu quả hơn nếu bạn dùng exists() )

  • prefetch_related và select_related

students = Student.objects.all()
for student in students:
    print(student.class.name)

Đoạn code trên thực hiện N + 1 câu query Nên sử dụng như sau:

students = Student.objects.all().select_related('class')
for student in students:
    print(student.class.name)
  • bulk_create và bulk_update

  • Use foreign key values directly

Last updated