Django kiểm tra xem có tồn tại bất kỳ truy vấn nào không


87

Trong django cách kiểm tra xem có mục nhập nào tồn tại cho truy vấn không

sc=scorm.objects.filter(Header__id=qp.id)

Đây là cách nó được thực hiện trong php

if(mysql_num_rows($resultn)) {
    // True condition
    }
else {
    // False condition
    }

Câu trả lời:


86

Sử dụng count():

sc=scorm.objects.filter(Header__id=qp.id)

if sc.count() > 0:
   ...

Ưu điểm so với ví dụ: len()QuerySet chưa được đánh giá:

count()thực hiện SELECT COUNT(*)hậu trường, vì vậy bạn nên luôn sử dụng count() thay vì tải tất cả bản ghi vào các đối tượng Python và gọi len() kết quả.

Lưu ý điều này, Khi các Bộ truy vấn được đánh giá có thể đáng đọc.


Nếu bạn sử dụng get(), ví dụ scorm.objects.get(pk=someid), và đối tượng không tồn tại, một ObjectDoesNotExistngoại lệ sẽ được đưa ra:

from django.core.exceptions import ObjectDoesNotExist
try:
    sc = scorm.objects.get(pk=someid)
except ObjectDoesNotExist:
    print ...

Cập nhật: cũng có thể sử dụng exists():

if scorm.objects.filter(Header__id=qp.id).exists():
    ....

Trả về Truenếu QuerySet chứa bất kỳ kết quả nào và Falsenếu không. Điều này cố gắng thực hiện truy vấn theo cách đơn giản và nhanh nhất có thể, nhưng nó thực hiện gần giống như truy vấn QuerySet bình thường.


51
if scorm.objects.filter(Header__id=qp.id).exists()
Alexander Lebedev

@Alex Lebedev: Có, phương pháp này sẽ có trong Django 1.2. Cảm ơn bạn.
Felix Kling


0

điều này đã làm việc cho tôi!

if some_queryset.objects.all (). tồn tại (): print ("bảng này không trống")

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.